2014-02-19 3 views
-1

Мне нужно создать в моем приложении несколько экземпляров одного класса. В этом классе мне нужно получить доступ к свойствам из других классов, и я действительно не хочу подталкивать свои свойства во всех моих классах при их создании.Почему не наследование работает со значениями?

Поэтому я думал, что могу наследовать этот класс от родителя, у которого есть все необходимые мне свойства.

Например:

// This class is called only once at the start of my app 
class Parent 
{ 
    int Property1 = 0; 

    public Parent(int val) 
    { 
     this.Property1 = val; 
    } 
} 


class Child : Parent 
{ 
    public Child() 
    { 
    } 

    public void PrintProp() 
    { 
     // Will always print the value of Parent's Property1 which has been defined only once 
     Console.WriteLine(Property1); 
    } 
} 

Проблема с этим кодом является то, что каждый раз, когда я определяю новый ребенка(), значение property1 является 0, а не значение, которое я послал его в моем запуске программы.

Как я могу это достичь?

+2

Звучит так, как будто «Родитель» должен иметь какую-то конфигурацию. Если это так, просто передайте экземпляр этого типа вокруг каждой дочерней конструкции. Наследование вам не поможет. – poke

+0

- свойство1 глобально для всех экземпляров или отличается для каждого экземпляра объекта? – BlackICE

+0

Как «ребенок» знает, что его родитель является «родителем»? –

ответ

4

Наследование в объектно-ориентированных языках программирования является механизмом для объединения классов, поддерживающих , является отношение. 1

См. this article для перспективы от автора языка программирования Eiffel.

См. Также this wikipedia article для более подробной информации. (Я был бы недостоверным, отметив, что в настоящее время документ плохо подготовлен.)

Похоже, что то, что вы пытаетесь выполнить, похоже на глобальное значение или обмен значениями между экземплярами. См. this article для механизма, который выполняется в Windows Presentation Framework.

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

Для обмена глобальными значениями объектно-ориентированным способом, пожалуйста, взгляните на Singleton Pattern.

+0

На самом деле использование наследования только для повторного использования кода - это плохая практика, которая будет закончена в Yo-yo anti-pattern в крупномасштабных проектах! Основными причинами использования наследования будут динамическая привязка и полиморфизм. –

Смежные вопросы