如果我有一个界面MyInterface1
interface MyInterface1
{
ImyGod myproperty { get; set; }
}
如果我有一堂课做以下事情,它会抱怨
class myClass : IMyInterface1
{
myGod myproperty { get; set; }
}
我应该在这里用 myGod 发起 myClass 什么?谢谢。
那是不可能的。为了实现接口,成员的签名必须与接口中定义的签名完全相同。您将需要更改接口或类的实现,以便属性的类型完全匹配。
由于您的属性有一个 setter,这意味着根据接口,您可以设置任何实现ImyGod
该属性的对象,但由于派生类的类型myGod
改为,它不能支持ImyGod
.
您可以做的是使用通用接口,如下所示:
interface MyInterface1<T> where T : ImyGod
{
T myproperty { get; set; }
}
class myClass : IMyInterface1<myGod>
{
myGod myproperty { get; set; }
}
这将按预期编译和工作,并且还可以防止有人将someOtherGod
实例设置为它显然不支持的属性。
您应该将该属性声明为公开的:
class myClass : IMyInterface1
{
public ImyGod myproperty {get; set;}
}