如果我有一个实现接口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?
}
答案 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();
}