这个界面使用有什么问题?

时间:2013-05-21 09:02:56

标签: c# .net-2.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,我就不能这样做。

3 个答案:

答案 0 :(得分:3)

  

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

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

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

如果您有:

interface AnotherInterface : MyInterface

class AnotherInterfaceImpl : AnotherInterface, MyInterface

然后说AnotherInterfaceImpl实施MyInterface

答案 1 :(得分:3)

您的班级AnotherInterfaceImpl实际上并未实施AnotherInterface的所有成员。公共财产AnotherInterfaceImpl.member1的格式必须为MyInterface,而不是MyInterfaceImpl

请注意,此限制仅适用于公共属性。私有字段AnotherInterfaceImpl._member1仍可以是MyInterfaceImpl类型,因为MyInterfaceImpl实现了MyInterface

答案 2 :(得分:1)

您需要“明确地”键入您的成员,因为接口定义了它们。

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

    ...Other implementation
}