我正在尝试在类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();
}
答案 0 :(得分:0)
仅仅因为B
,C
,D
继承自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();