如果我有一个界面MyInterface1
interface MyInterface1
{
ImyGod myproperty { get; set; }
}
如果我有一个课程,请执行以下操作,它会抱怨
class myClass : IMyInterface1
{
myGod myproperty { get; set; }
}
我应该在myGlass中使用myGod进行处理? 感谢。
答案 0 :(得分:2)
那是不可能的。为了实现接口,成员的签名必须与接口中定义的签名完全相同。您将需要更改接口或类的实现,以便属性的类型完全匹配。
由于你的属性有一个setter,这意味着,根据接口,你可以将任何对象实现ImyGod
到该属性,但由于派生类是键入myGod
,它不支持ImyGod
的任何其他实现。
您可以使用通用界面,如下所示:
interface MyInterface1<T> where T : ImyGod
{
T myproperty { get; set; }
}
class myClass : IMyInterface1<myGod>
{
myGod myproperty { get; set; }
}
这将按预期编译和工作,并且还会阻止有人将someOtherGod
实例设置为该属性,但显然无法支持该属性。
答案 1 :(得分:0)
您应该将该属性声明为public:
class myClass : IMyInterface1
{
public ImyGod myproperty {get; set;}
}