这个接口的使用有什么问题?

本文关键字:什么 问题 接口 | 更新日期: 2023-09-27 18:14:28

假设有一个这样的接口:

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类型,我就不能这样做

这个接口的使用有什么问题?

您的类AnotherInterfaceImpl实际上并没有实现AnotherInterface的所有成员。公共属性AnotherInterfaceImpl.member1的类型必须是MyInterface,而不是MyInterfaceImpl

注意这个限制只适用于public属性。私有字段AnotherInterfaceImpl._member1仍然可以是MyInterfaceImpl类型,因为MyInterfaceImpl实现了MyInterface

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

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

这就像说"我的客户对象有一个orders (list)属性;为什么我的客户不是名单?"

如果你有:

interface AnotherInterface : MyInterface

class AnotherInterfaceImpl : AnotherInterface, MyInterface

那么可以说AnotherInterfaceImpl实现了MyInterface

您需要"显式地"键入您的成员,因为接口定义了它们。

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