2009-03-19 2 views
1

Если я создаю абстрактное свойство в своем базовом классе C#, а затем реализует его подкласс, можно ли затем ссылаться и использовать это свойство в одном из методов моего базового класса позже, как только подкласс устанавливает это свойство?Возможно использование значения абстрактного значения в методе базового класса?

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

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

В принципе, я хочу иметь возможность установить флаг в любых подклассах, используя эту базу, чтобы сказать true или false, чтобы метод SendRequest базового класса знал, следует ли выбирать из нескольких URI, которые я установил в базовом классе. Этот флаг определит, какой формат использовать в методе SendRequest базового класса, поскольку каждый подкласс будет меняться в зависимости от того, какой формат URI должен использовать базовый класс для этого подкласса, чтобы отправить HttpRequest от имени подкласса.

ответ

7

Да, это в основном целая цель абстрактных свойств и методов.

1

Это звучит как что-то вроде этого будет работать:

class Base 
{ 
    protected Boolean Flag { get; set; } 

    public void Foo() 
    { 
     if (this.Flag) 
     { 
      // logic here 
     } 
    } 
} 

class Child : Base 
{ 
    public Child() 
    { 
     // you can set Flag anywhere you wish 
     this.Flag = true; 
    } 
} 

Я не думаю, что вам нужно что-нибудь, чтобы быть abstract. Вы можете установить Flag в дочернем типе, а затем проверить его в любом типе для условной логики.

+0

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

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