Доступ к членам свойства производного класса из объекта базового класса в CSharp - PullRequest
0 голосов
/ 02 декабря 2010

У меня проблемы с доступом к членам свойства производного класса с использованием объекта базового класса.

Сценарий:

public class BaseClass{
    public virtual Write(BaseClass data){
    }
}

public class DerivedClass : BaseClass{

    private string name:

    public string Name {get {return name} set {name = value;} }

    public override Write(BaseClass data){
     Console.println(data.Name);  // gives me error here
    }

}

Ответы [ 2 ]

6 голосов
/ 02 декабря 2010

Причина, по которой у вас возникают проблемы с доступом к свойствам в производных классах, заключается в том, что базовый класс не знает (и что еще более важно не должно ) знать о них.Разные производные классы могут иметь разный набор добавленных свойств.Информирование об этом базового класса противоречило бы важным принципам объектно-ориентированного проектирования.Один такой принцип, который приходит на ум, это принцип замещения Лискова .

0 голосов
/ 09 февраля 2014

Как указано, name не существует в BaseClass.

Либо переместите «name» в базовый класс, либо создайте отдельный метод записи, который записывает специфические данные унаследованного класса.

public class DerivedClass : BaseClass{

    public string Name { get; set; }

    public override void Write(DerivedClass data) {
        Console.printLn(data.Name);
        base.Write(data)
    }

    // why print a different instance, just write self
    public void Write() {
        Console.printLn(this.Name);
        base.Write(this)
    }

}

Не уверен, почему класс принимает другой экземпляр класса для записи, когда вы можете просто вызвать запись для себя.Измените сигнатуру BaseClass на

public virtual Write()

или как WebControls

public virtual Write(HtmlTextWriter writer);

, если вы хотите просто отладить, вы можете просто сериализовать в JSON или XML и затем вывести это на консоль

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...