0

假设有一个这样的接口:

interface MyInterface 
{
    public string AProperty { get; set;}

    public void AMethod ()
}

该接口在另一个接口内部使用:

interface AnotherInterface
{
    public MyInterface member1 { get; set; }

    public int YetAnotherProperty {get; set;}
}

现在假设有两个类,一个实现每个接口。

class MyInterfaceImpl : MyInterface
{
    private string aproperty
    public string AProperty
    {
        //... get and set inside
    }

    public void AMethod ()
    {
       //... do something
    }
}

最后:

class AnotherInterfaceImpl : AnotherInterface
{
    private MyInterfaceImpl _member1;
    public MyIntefaceImpl member1
    {
        //... get and set inside
    }

    ...Other implementation
}

为什么编译器抱怨AnotherInterfaceImpl没有实现MyInterface

我知道这是一个非常基本的问题......但我需要序列化为 xml AnotherInterfaceImpl,如果 member1 是 MyInterface 类型,我不能这样做。

4

3 回答 3

3

为什么编译器会抱怨 AnotherInterfaceImpl 没有实现 MyInterface?

因为它没有实现它。它有一个实现它的成员。

这就像说“我的客户对象有一个订单(列表)属性;我的客户怎么不是一个列表?”

如果您有:

interface AnotherInterface : MyInterface

或者

class AnotherInterfaceImpl : AnotherInterface, MyInterface

那么可以说AnotherInterfaceImpl实施了MyInterface

于 2013-05-21T09:06:35.817 回答
3

您的课程AnotherInterfaceImpl实际上并未实现AnotherInterface. 公共属性AnotherInterfaceImpl.member1必须有类型MyInterface,而不是MyInterfaceImpl

请注意,此限制仅适用于公共财产。私有字段AnotherInterfaceImpl._member1仍然可以是类型MyInterfaceImpl,因为MyInterfaceImplimplements MyInterface

于 2013-05-21T09:08:36.580 回答
1

您需要在接口定义成员时“显式”键入您的成员。

class AnotherInterfaceImpl : AnotherInterface
{
    private MyInterfaceImpl _member1;
    public MyInteface member1
    {
        get{ return _member1;}
        set{ _member1 = value;}
    }

    ...Other implementation
}
于 2013-05-21T09:11:14.920 回答