C# 实现接口和继承
本文关键字:继承 接口 实现 | 更新日期: 2023-09-27 17:56:49
我正在尝试使用继承声明的类来实现属性接口。也许这个例子更容易理解。
MyClassA 没问题,但 MyClassB 有一个编译错误"Test.MyClassB"没有实现接口成员"Test.IMyInterface.PropA"。知道我该怎么做吗?
/******编辑代码 ******/
public class BaseClass
{
public int PropA { get; set; }
}
public class InheritClass : BaseClass
{
public int PropB { get; set; }
}
public interface IMyInterface
{
BaseClass PropClass { get; set; }
}
public class MyClassA : IMyInterface
{
public BaseClass PropClass { get; set; }
}
public class MyClassB : IMyInterface
{
public InheritClass PropClass { get; set; }
}
这是你应该做的
public class BaseClass
{
public int PropA { get; set; }
}
public class InheritClass : BaseClass
{
public int PropB { get; set; }
}
public interface IMyInterface
{
BaseClass PropClass { get; set; }
}
public class MyClassA : IMyInterface
{
public BaseClass PropClass { get; set; }
}
public class MyClassB : IMyInterface
{
private BaseClass _propClass;
public BaseClass PropClass
{
get { return (InheritClass)_propClass; }
set { _propClass = (InheritClass)value; }
}
}
这不是直接可能的,也是您尝试这样做的原因。 如果您有基类,则可以使用其子级来设置或获取...
你的接口要求所有实现它的类都具有属性int PropA { get; set; }
,但你的类MyClassB
还没有这个方法继承IMyInterface
。
所以你有两个选择。
一、只实现接口:
public class MyClassB : IMyInterface
{
public int PropA { get; set; }
public int PropB { get; set; }
}
或者,第二,如果你只希望在MyClassB
上公开PropB
,那么你可以显式实现接口(并假设PropB
应该是实现),那么你可以这样做:
public class MyClassB : IMyInterface
{
int IMyInterface.PropA { get { return this.PropB; } set { this.PropB = value; } }
public int PropB { get; set; }
}
你应该在 MyClassB 的实现中添加PropA
:
public class MyClassB : IMyInterface
{
**public int PropA { get; set; }**
public int PropB { get; set; }
}