2009-12-10 4 views
1

은, 제발 도와주세요C# 샘플 구문 질문

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()의 두 버전이 클래스의 인스턴스를 만들고 호출자를 호출합니다. 생성자를 보호함으로써 코드는 클래스가 인스턴스화에 대한 배타적 제어를 유지한다는 것을 보장합니다. 이는 클래스 외부의 다른 코드 (또는 그 하위 클래스)가이 클래스의 인스턴스를 만들 수 없다는 것을 의미합니다.

2

생성자는 정적 생성 메소드 만이 실제로 클래스를 인스턴스화 할 수 있도록 보호됩니다.

+2

올바르지 않습니다. 클래스 또는 그 자손의 모든 메소드는 보호 된 생성자를 호출 할 수 있습니다. – CesarGon

+1

이 클래스에서 상속 받아 해당 클래스를 인스턴스화하는 것은 사실입니다. – jestro

+0

상속받을 필요가 없습니다. 다른 보호되지 않은 ctor를 가질 수 있습니다. –

4

protected Customer() { }은 생성자입니다. 클래스에서 객체를 인스턴스화 할 때 자동으로 호출되는 특수한 메소드입니다. Customer c = new Customer()을 입력하면 생성자가 런타임에 해당 인스턴스를 할당하고 초기화 한 후에 해당 인스턴스를 초기화 할 수 있습니다. protected 키워드는 Customer 또는 그 자손 클래스의 코드 만 해당 특정 생성자를 사용하여 해당 클래스를 인스턴스화 할 수 있음을 의미합니다.

1

이것은 클래스의 생성자가이 클래스 또는 하위 클래스의 멤버 만 호출 할 수있는 "보호 된"액세스 권한이 있음을 의미합니다. 실질적으로 이것은 정적 메서드가이 클래스의 인스턴스를 만드는 데 사용되거나 다른 생성자 (파생 클래스에있을 수 있음)가이 생성자에 위임한다는 의미입니다.

1

생성자에 protected 키워드를 사용하면 Customer에서 파생되는 모든 클래스 내부에서 Customer 개체 (정적 팩터 리 메서드처럼) 자체의 인스턴스화 만 허용됩니다.