Поскольку операция >
имеет более высокий приоритет, чем ^
, поэтому она эквивалентна true ^ (1>0)
, которая работает с одними и теми же типами (boolean ^ boolean).
Например, если у вас есть класс, который следует создавать только с помощью заводских методов. Или если у вас есть перегрузки конструктора, и некоторые из них должны использоваться только другими конструкторами. Наверное, и другие причины =)
Если вы знаете некоторые шаблон дизайна, это очевидно: Пример на Java (извините, я недостаточно хорошо знаю C #) с одноэлементным классом:
class Meh
{
private Meh() { }
private static Meh theMeh = new Meh();
public static Meh getInstance() { return theMeh; }
}
Всякий раз, когда вы хотите предотвратить прямое создание экземпляра класса извне, вы будете использовать конструктор private
. Например, до C # 2.0, в котором были представлены статические
классы, вы использовали конструктор private
, чтобы выполнить примерно то же самое:
sealed class StaticClass {
private StaticClass() {
}
public static void DoSomething() {
}
}
Я могу припомнить несколько его применений:
Например, когда вы предоставляете фабричные методы для управления созданием экземпляров ...
public class Test(){
private Test(){
}
void DoSomething(){
// instance method
}
public static Test CreateCoolTest(){
return new Test();
}
}
Если вы хотите запретить пользователям вашего класса создавать экземпляры класса напрямую. Вот несколько распространенных случаев:
Хотя эта ссылка относится к java , я думаю, что она должна помочь вам понять причину, по которой идея почти такая же.
Частные конструкторы предотвращают явное создание экземпляра класса вызывающими объектами. Есть несколько распространенных случаев, когда частный конструктор может быть полезен:
- классы, содержащие только статические служебные методы
- классы, содержащие только константы
- перечисления, безопасные для типов
- синглтоны
Вы можете использовать его с наследованием в случае, когда аргументы конструктора для базового класса имеют разные типы, чем аргументы конструктора дочерних классов, но вам по-прежнему нужны функциональные возможности базового класса в дочернем классе, например. защищенные методы.
Как правило, этого следует избегать по возможности, поскольку это плохая форма наследования.
И, конечно, вы можете использовать частный конструктор для предотвращения создания подклассов.
Частные конструкторы используются для предотвращения создания экземпляров класса, когда нет полей или методов экземпляра, таких как класс Math, или когда метод вызывается для получения экземпляра класса. Если все методы в классе статические, подумайте о том, чтобы сделать статическим весь класс. Для получения дополнительной информации см. Статические классы и Статические члены классов.
class NLog
{
// Private Constructor:
private NLog() { }
public static double e = System.Math.E; //2.71828...
}
Ниже приводится пример класса, использующего частный конструктор.
public class Counter
{
private Counter() { }
public static int currentCount;
public static int IncrementCount()
{
return ++currentCount;
}
}
class TestCounter
{
static void Main()
{
// If you uncomment the following statement, it will generate
// an error because the constructor is inaccessible:
// Counter aCounter = new Counter(); // Error
Counter.currentCount = 100;
Counter.IncrementCount();
System.Console.WriteLine("New count: {0}", Counter.currentCount);
}
}