0

如果我有一个界面MyInterface1

interface MyInterface1
{
    ImyGod myproperty { get; set; }
}

如果我有一堂课做以下事情,它会抱怨

class myClass : IMyInterface1
{
    myGod myproperty { get; set; }
}

我应该在这里用 myGod 发起 myClass 什么?谢谢。

4

2 回答 2

2

那是不可能的。为了实现接口,成员的签名必须与接口中定义的签名完全相同。您将需要更改接口或类的实现,以便属性的类型完全匹配。

由于您的属性有一个 setter,这意味着根据接口,您可以设置任何实现ImyGod该属性的对象,但由于派生类的类型myGod改为,它不能支持ImyGod.

您可以做的是使用通用接口,如下所示:

interface MyInterface1<T> where T : ImyGod
{
    T myproperty { get; set; }
}

class myClass : IMyInterface1<myGod>
{
    myGod myproperty { get; set; }
}

这将按预期编译和工作,并且还可以防止有人将someOtherGod实例设置为它显然不支持的属性。

于 2012-11-05T19:27:59.030 回答
0

您应该将该属性声明为公开的:

class myClass : IMyInterface1 
{ 
    public ImyGod myproperty {get; set;} 
}
于 2012-11-05T19:24:56.000 回答