2013-06-20 3 views
3

저는 기본 클래스와 하위 클래스가 있습니다. 기본 클래스는 일부 변수를 포함하고 자식 변수는 일부 변수를 포함합니다.하위 개체의 기본 개체를 할당하십시오.

내가해야 할 일은 자식 클래스의 개체를 만들 때 생성자에서 자식 개체의 기본 클래스 변수를 설정할 기본 클래스 개체를 전달한다는 것입니다.

코드 :

public class BaseClass 
{ 
    public int BaseInteger; 
    public double BaseDouble; 
    public bool BaseBool; 
} 

public class ChildClass : BaseClass 
{ 
    public ChildClass(BaseClass baseClass) 
    { 
     this.base = baseClass;  // I am trying to do this. 
    } 

    public int ChildInteger; 
    public string ChildString; 
} 

그래서 내가 여기 어떻게하려고 무엇을 할 수 있습니다. 방법? 이 코드를 시도했을 때이 오류가 발생했습니다.

Use of keyword 'base' is not valid in this context 

답변

1
public class BaseClass 
{ 
    public int BaseInteger; 
    public double BaseDouble; 
    public bool BaseBool; 
} 

public class ChildClass : BaseClass 
{ 
    public ChildClass(BaseClass baseClass) 
    { 
     this.BaseInteger = baseClass.BaseInteger; 
     this.BaseDouble = baseClass.BaseDouble; 
     this.BaseBool = baseClass.BaseBool; 
    } 

    public int ChildInteger; 
    public string ChildString; 
} 
+1

public class BaseClass { public int BaseInteger; public double BaseDouble; public bool BaseBool; public BaseClass() { } public BaseClass(BaseClass baseClass) { this.BaseInteger = baseClass.BaseInteger; this.BaseDouble = baseClass.BaseDouble; this.BaseBool = baseClass.BaseBool; } } public class ChildClass : BaseClass { public int ChildInteger; public string ChildString; public ChildClass(BaseClass baseClass) : base(baseClass) { } 

가} 그냥 – chancea

+3

그냥 코드에 대한 참조를 전달합니다 그럼 당신은 단순히 당신의 ChildClass 클래스에서이 기본 생성자를 호출 할 수 있습니다 굉장히 유용하다. – svick

5

하기는 ChildClassBaseClass를 포함 아니라 그것에서을 상속하지 않는 것을 깨닫게해야합니다.

따라서 this 키워드 (예 : this.BaseInteger)를 사용하여 기본 클래스에 정의 된 데이터와 메소드에 액세스 할 수 있습니다.

그 이유는 ChildClassBaseClass을 '설정'할 수 없기 때문입니다.

그럼에도 불구하고, 당신은 예를 들어, 뭘 하려는지 달성하기 위해 몇 가지 유용한 패턴이 있습니다 :

public class BaseClass 
{ 
    protected BaseClass() {} 

    protected BaseClass(BaseClass initData) 
    { 
     this.BaseInteger = initData.BaseInteger; 
     this.BaseDouble = initData.BaseDouble; 
     this.BaseBool = initData.BaseBool; 
    } 

    public int BaseInteger; 
    public double BaseDouble; 
    public bool BaseBool; 
} 

public class ChildClass : BaseClass 
{ 
    public ChildClass() {} 

    public ChildClass(BaseClass baseClass) : base(baseClass) 
    { 
    } 

    public int ChildInteger; 
    public string ChildString; 
} 

덕분에 그의 제안을 @svick 할 수 있습니다.

+0

기본 클래스 생성자에'class' 키워드를 잘못 사용했습니다. –

+0

감사합니다. 결정된. – haim770

+0

'BaseClass' 생성자가 자식 클래스에서만 사용될 예정이라면'protected' 생성자를 만드는 것이 좋습니다. 또한, 'BaseClass'는 또 다른 생성자를 필요로하므로 다른 인스턴스에서 인스턴스를 복사 할 수 있습니다. – svick

1

BaseClass 클래스의 두 번째 생성자를 만드는 가장 우아한 방법은 해당 필드를 초기화해야하는 BaseClass 인스턴스를 사용하는 것입니다. 아무런 설명도하지 않습니다 당신은 또한 다음 BaseClass` 자체 '에 그 생성자를 넣을 수 있습니다

+0

내가보기에 문제는 기본 클래스에 너무 많은 변수가 있고 기본 클래스가 다른 클래스에서 파생되고 그 안에 복잡한 클래스 객체가 포함되어 있으면 어떻게 될까요? 그런 다음 보호 된 생성자는 충분히 커야합니다. –

관련 문제