在派生类中使用C#实现的接口变量

时间:2018-11-13 17:35:31

标签: class variables interface implementation derived

我正在尝试在类A中实现接口方法,并且通过这种实现,我想从输入中给出变量g值,然后能够在其他派生类中读取该g值。问题是,没有任何派生类能够看到该值。似乎是什么问题?

interface ISomething
{
    void something(string some);
}
public class A : ISomething
{
    public string g;
    public void something(string some)
    {
        g = some;
    }
}
public class B : A
{
    public void methodB()
    {
        Console.WriteLine($"Printing g value from method B: {g}");
    }

}
public class C : A
{
    public void methodC()
    {
        Console.WriteLine($"Printing g value from method C: {g}");
    }
}
public class D : B
{
    public void methodD()
    {
        Console.WriteLine($"Printing g value from method D: {g}");
    }
}

static void Main(string[] args)
    {
        Console.WriteLine("Input something: ");
        string x = Console.ReadLine();
        A a = new A();
        a.something(x);
        B b = new B();
        C c = new C();
        D d = new D();
        b.methodB();
        c.methodC();
        d.methodD();
        Console.ReadKey();
    }

1 个答案:

答案 0 :(得分:0)

仅仅因为BCD继承自A并不意味着它们的field g将被初始化为任何东西。创建的每个对象仍然是一个独立的对象,只是因为您声明了A类型的对象并不意味着从A继承的每个类实例都将拥有与您创建的A实例相同的字段值。您应该通过调用field g方法来设置每个派生类的something(),因此将代码更改为此:

B b = new B();
C c = new C();
D d = new D();
d.something(x);
c.something(x);
b.something(x);
b.methodB();
c.methodC();
d.methodD();