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; }
}

C# 实现接口和继承

这是你应该做的

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; }
}