c # реализованная переменная интерфейса используется в производном классе - PullRequest
0 голосов
/ 13 ноября 2018

Я пытаюсь реализовать интерфейсный метод в классе 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 голосов
/ 13 ноября 2018

То, что 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();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...