繁体   English   中英

C#实现接口和继承

[英]C# Implement Interface and inheritance

我试图用继承声明的类来实现属性接口。 也许这个例子更容易理解。

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; }属性int PropA { get; set; } int PropA { get; set; } 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; }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM