Самый простой способ заставить C # не создавать экземпляр класса, разве что наследовать? - PullRequest
10 голосов
/ 14 января 2010

Какой самый простой способ заставить C # не создавать экземпляр класса, если он не наследуется?

Звучит странно, но я не хочу объяснять почему. У меня есть базовый класс и два класса, которые наследуют его. Я хочу использовать только производный класс, а не базовый. Производный класс не имеет никаких дополнительных функций. Какой самый простой способ НЕ позволять мне писать новый BaseClass (); так что я случайно его не использую? У меня есть функции, которые работают с базовым классом, а не с производным.

Ответы [ 8 ]

43 голосов
/ 14 января 2010

Сделать класс базовым abstract.

abstract class Person { }

class Programmer : Person { }

var person = new Person();          // compile time error
var programmer = new Programmer();  // ok
6 голосов
/ 14 января 2010

Установить класс на абстрактный:

public abstract BaseClass
{



}

http://msdn.microsoft.com/en-us/library/sf985hc5.aspx

5 голосов
/ 14 января 2010

вместо нормального:

"public Class MyClass"

сделай это

"public abstract Class MyClass"
5 голосов
/ 14 января 2010
public abstract class BaseClass {
...
}
5 голосов
/ 14 января 2010

Может ли базовый класс быть абстрактным? Это сделало бы это.

1 голос
/ 14 января 2010

Способ, которым вы описываете свои потребности, и ваш класс abstract - это путь. Будет остановит создание экземпляра базового класса и позволит вам вызывать функции на Это. Это также позволит вам пометить функции и свойства как абстрактные и заставить унаследованные классы реализовать их.

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

Надеюсь, что это добавляет ценность.

1 голос
/ 14 января 2010

Сделать конструктор из BaseClass защищенным:

public class BaseClass {

   protected BaseClass()
   {
      // DO SOMETHING
   }

}


public class Derived : BaseClass {

   public Derived() {}
}
0 голосов
/ 27 августа 2012

Использовать защищенный конструктор для базового класса

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