2013-10-23 6 views
-1

저는 C#을 처음 사용하고 그것을 실험하고 있습니다.서브 클래스의 상속 클래스 속성

나는 FormID 속성을 가진 수퍼 클래스 Form입니다. Form은 다른 4 개의 서브 클래스에 의해 상속됩니다.

Form-> DeployForm -> SystemOutForm_> Colection -> SystemIn.

서브 클래스에서 FormID 속성에 액세스하려면 어떻게해야합니까? (DeployForm, SystemOutColection, CollectiomSystemIn?)

// Superclass - Form. 
public class Form 
{ 
    private int _FormID; 
    private string _UserName; 
    private string _ComputerName; 
    private string _AssetTag; 
    private string _Department; 
    private string _Status; 

    // Below are the associations I linked 
    // to other classes that don't require attribute FormID. 
    private FormCategory _differentiateBy; 
    private CheckList _referencesToChecklist; 
    private Staff _referencesToStaff; 

    public Form() 
    { 
     _differentiateBy = new FormCategory(); 
     _referencesToChecklist = new CheckList(); 
     _referencesToStaff = new Staff(); 
    } 

    public int FormID 
    { 
     get { return _FormID; } 
     set { _FormID = value; } 
    } 
} 

// Sub Class - DeploymentForm 
public class DeploymentForm : Form 
{ 
    private DateTime _DeployDate; 
    private int _DeployBy; 
    private DateTime _SetupDate; 
    private int _SetupBy; 

    public DeploymentForm() 
    { 
    } 

    public DateTime DeployDate 
    { 
     get { return _DeployDate; } 
     set { _DeployDate = value; } 
    } 

    public int DeployBy 
    { 
    get { return _DeployBy; } 
    set { _DeployBy = value; } 
    } 

    public DateTime SetupDate 
    { 
     get { return _SetupDate; } 
     set { _SetupDate = value; } 
    } 

    public int SetupBy 
    { 
     get { return _SetupBy; } 
     set { _SetupBy = value; } 
    } 
} 

// etc... 
+0

파생 클래스 안에 'this.FormID'또는 'base.FormID'를 사용하십시오. –

+0

새 경험이 있기 때문에 질문을 쉽게 읽을 수있는 자유를 얻었습니다. 이것은 좋은 대답을 훨씬 더 많이 할 것입니다. indaverntly 의미를 바꾼 경우, 사과드립니다. 모호성을 피하는 질문을 편집하십시오. – Jodrell

+0

@Jorell, 질문을 수정하는 데 도움을 주셔서 감사합니다. – AlphaRomeo69

답변

0

FormID 속성의 범위가 public이므로 정상적인 구성원 인 것처럼 하위 클래스에서 액세스 할 수 있습니다. 다만 영업 이익의 의견에 대응하여,

this.FormID 


편집을한다.

하위 클래스의 생성자가 기본값 (매개 변수 없음)이고 사용자의 것과 마찬가지로 비어있는 경우 중복됩니다. 빈 public 기본 생성자는 제거 할 수 있고 제거해야합니다.

무언가를 수행하는 기본 생성자 public을 만들고 싶다면 그냥 수행하십시오. 기본 클래스의 기본 생성자 (있는 경우)는 하위 클래스를 인스턴스화 할 때 호출됩니다.

기본 클래스에 기본 생성자가 없거나 특정 매개 변수가 아닌 기본 생성자를 호출하려는 경우 하위 클래스 생성자 정의에서 호출을 지정할 수 있습니다. 예 :

public class BaseClass 
{ 
    protected BaseClass(int p) 
    { 
    } 
} 

public class SubClass : BaseClass 
{ 
    public SubClass() 
     : base(int.MinValue) 
    { 
    } 

    public SubClass(int p) 
     : base(p) 
    { 
    } 
} 

클래스가 생성자가없는 경우 Rememeber,하는 public 기본 빈 생성자를 암시한다. 생성자가 지정되면 그 의미가 제거됩니다.

+0

안녕하세요 내가 deploymentForm 클래스의 생성자에 대해 무엇을 어떻게해야합니까 @jodrell? 이 일을 올바르게 할 수 있습니까? // Form 클래스에서 "formID"를 보유 할 deploymentForm 클래스의 속성을 선언 하시겠습니까? 개인 양식 _FormID; 공공 양식 FormID { 의 get {} 세트 {} } AlphaRomeo69 @ – AlphaRomeo69

+0

, 내 편집은 별도의 질문을 정말 참조하십시오. – Jodrell

+0

@Jorell 제게 설명해 주셔서 대단히 감사합니다. 제 두 번째 질문을 게시했습니다. – AlphaRomeo69

0

당신은 다른 모든 재산처럼 참조 :

public class DeployForm : Form 
{ 
    public void DoStuff() 
    { 
     System.Console.WriteLine("{0}", FormID); 
    } 
} 

가 AS :

DeploymentForm deploymentForm = new DeploymentForm(); 
var x = deploymentForm.FormID; 
+0

안녕하세요 @ chrisP, deploymentForm 클래스의 생성자에 대해 아무 것도해야합니까? 맞습니까? // Form 클래스에서 "formID"를 보유 할 deploymentForm 클래스의 속성을 선언 하시겠습니까? 개인 양식 _FormID; 공공 양식 FormID { 의 get {} 세트는 {} } – AlphaRomeo69

0

당신은 특별한 아무것도 필요하지 않습니다 별도로 C#의 자동 속성에 대해 배우고 싶습니다. 모든 속성에 대해 명시적인 배경 필드를 가질 필요가 없습니다.

관련 문제