C#:我可以指定一个类的成员结构作为继承接口的实现者吗?

时间:2017-01-10 03:02:28

标签: c# inheritance interface

如果我有一个实现接口IGetProps的Bag类型的结构,并且我有一个具有Bag类型成员变量的类Store,我可以在Store的实现中指定我希望Store类通过其成员提供IGetProps袋式。

Bag无法更改为类,以便我可以继承它。 IGetProps有很多方法,所以我不想用Store中的方法显式地包装每个方法。

例如:

interface IGetProps
{
    int GetA();
    int GetB();
}

struct Bag : IGetProps
{
    public int GetA() { return 0;}
    public int GetB() { return 1;}
    ... // Many more methods
}

class Store : IGetProps
{
    private Bag bag;        // <--- Can I designate bag to be the provide of IGetProps for Store?
}

1 个答案:

答案 0 :(得分:0)

简单的答案是“不”,您的班级无法继承struct MSDN

  

没有类的继承结构。结构   不能从其他结构或类继承,它不能作为基础   一个班级。但是,结构继承自基类Object。一个   struct可以实现接口,它与类完全相同   做。

然而这样的事情可以起作用,它仍然包装方法但尽可能容易地完成。除此之外别无选择。

interface IGetProps
{
    int GetA();
    int GetB();
}

struct Bag : IGetProps
{
    public int GetA() { return 0; }
    public int GetB() { return 1; }
}

class Store : IGetProps
{
    private Bag bag;        // <--- Can I designate bag to be the provide of IGetProps for Store?

    public int GetA() => bag.GetA(); // <--- c# 6.0 syntax for wrapping a method

    public int GetB() => bag.GetB();
}

我们实现接口方法,但接口方法将执行结构GetA()GetB()方法。当然,我们需要将bag分配给某些东西(即构造变量或属性)。

class Store : IGetProps
{
    public Store(Bag bag)
    {
        this.bag = bag;
    }

    private Bag bag;        // <--- Can I designate bag to be the provide of IGetProps for Store?

    public int GetA() => bag.GetA();

    public int GetB() => bag.GetB();
}