假设有这样的界面:
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,我就不能这样做。
答案 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
}