2009-12-10 4 views
1

Пожалуйста, помогите мне с, чтобы понять этот кусок кода:C синтаксис # пример вопрос

 protected Customer() 
    { 
    } 

в следующий класс (класс модели из образца приложения WPF MVVM):

public class Customer : IDataErrorInfo 
{ 
    #region Creation 

    public static Customer CreateNewCustomer() 
    { 
     return new Customer(); 
    } 

    public static Customer CreateCustomer(
     double totalSales, 
     string firstName, 
     string lastName, 
     bool isCompany, 
     string email) 
    { 
     return new Customer 
     { 
      TotalSales = totalSales, 
      FirstName = firstName, 
      LastName = lastName, 
      IsCompany = isCompany, 
      Email = email 
     }; 
    } 

    protected Customer()  // it is what I asked about 
    { 
    } 

    #endregion // Creation 
...... 
} 
+0

Спасибо всем, кто ответил. Было трудно выбрать принятый ответ (извините, что это может быть только один). Мои сомнения в этом фрагменте кода были связаны с наличием нескольких конструкторов для экземпляров создания и конкретной цели каждого из них. – rem

ответ

3

Кусок кода, на который вы указываете, является constructor. Это метод, который (потенциально) автоматически запускается, когда экземпляр вашего класса создается во время выполнения.

В этом случае он помечен protected keyword. Это означает, что к нему имеет доступ только класс владельца и любые производные классы (т. Е. Классы, которые наследуют его).

При взгляде на ваш код две версии статического метода CreateNewCustomer() в вашем классе создают экземпляры класса, вызывая constuctor. Защищая конструктор, код гарантирует, что класс сохраняет исключительный контроль над экземпляром; это означает, что никакой другой код вне класса (или его классов-потомков) не может создавать экземпляры этого класса.

2

Конструктор так что только статические методы создания могут фактически создавать экземпляр класса.

+2

Это неверно. Любой метод в классе или его потомках может вызывать защищенный конструктор. – CesarGon

+1

Это правда, что вы могли бы наследовать этот класс и иметь этот экземпляр класса ... – jestro

+0

Вам даже не нужно наследовать. У вас может быть еще один незащищенный ctor. –

4

protected Customer() { } - конструктор, специальный метод, который автоматически вызывается при создании объекта из класса. Когда вы вводите Customer c = new Customer(), конструктор может инициализировать этот экземпляр после того, как время выполнения выделило и перезагрузило память для него. Ключевое слово protected означает, что только код внутри класса Customer или его потомков разрешен для создания экземпляра указанного класса с использованием этого конкретного конструктора.

1

Это означает, что конструктор для вашего класса имеет «защищенный» доступ, что означает, что его могут назвать только члены этого класса или подклассов. Практически это означает, что либо статический метод используется для создания экземпляра этого класса, либо другой конструктор (возможно, в производном классе) делегирует этот конструктор.

1

Использование ключевого слова protected в конструкторе допускает только создание объекта Customer внутри себя (например, статических методов фабрики) и внутри любого класса, который происходит от Customer.

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