我有一个接口,它由许多类实现。每个类也有自己的一组属性,这些属性在接口中不存在。现在,如果我想设计一个返回接口类型的工厂,我无法设置某些派生类属性,因为它们不是接口的成员。
如何解决这种情况?
如果你有一个像这样的接口
public interface MyInterface
{
string Name { get; }
}
和实现,如
public class MyClass : MyInterface
{
string Name { get; set; }
int Something { get; set; }
}
public class MySecondClass : MyInterface
{
string Name { get; set; }
decimal SomethingElse { get; set; }
}
您可以在工厂中创建您的类,例如
public class MyFactory
{
public MyInterface createMyClass()
{
return new MyClass() { Name = "foo", Something = 42 };
}
public MyInterface createMySecondClass()
{
return new MySecondClass() { Name = "bar", SomethingElse = 4.2M };
}
}
当然,这样你就无法访问未在界面中声明的成员。
var something = myFactory.createMyClass().Something;
这是行不通的。您只能访问名称属性:
var name = myFactory.createMyClass().Name;
如果要访问类的特殊属性,则必须将接口强制转换为实际类:
var something = ((MyClass)myFactory.createMyClass()).Something;