c# 实现的接口变量用于派生 class

c# implemented interface variable used in derived class

我正在尝试在 class A 中实现一个接口方法,通过这种实现,我想从输入中赋予变量 g 值,然后能够在其他派生的 [=14= 中读取该 g 值]是的。问题是,派生的 classes 中没有一个能够看到该值。好像是什么问题?

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

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

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();