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();
}
仅仅因为 B
、C
、D
继承自 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();
我正在尝试在 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();
}
仅仅因为 B
、C
、D
继承自 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();