3

C#에서는 개체의 필드를 초기화하는 개체 이니셜이 at creation time without using a constructor입니다.C#에서 클래스 초기화 프로그램을 사용할 수 있습니까?

이제는 override 구문을 사용하지 않고 하위 클래스를 정의 할 때 클래스의 속성을 '초기화'할 수 있지만 단순히 알려진 속성의 값을 선언하는 것과 동일한 클래스가 있는지 궁금합니다.

예 :

public abstract class Car { 
    public abstract string Name { get; } 
} 
// usual approach 
public class Mustang : Car { 
    public overwrite string Name { get { return "Ford Mustang"; } } 
} 
// my idea of avoiding boilerplate code 
public class Mustang : Car { Name = "Ford Mustang" } 

이 작업을 수행 할 수있는 방법이 있나요? 없으면 T4 템플릿이 도움이 될 수 있습니까?

+0

실제 질문과 직접 ​​관련이 없지만 '덮어 쓰기'키워드가 없으므로 '무시'됩니다. – hvd

+0

@hvd 고마워, 나는 그 두 단어를 다시 섞어 버렸다 :-). – Bastian

답변

6

당신이 뭔가를 쓰는 것, rekire의 예를 명확하게하기 위해 또 다른 옵션은 당신이 쓰는 것 속성을 사용하는 것입니다

[CarName("Mustang")] 
public class Mustang : Car 

... 필요 적절한 반사 코드를 Car에 작성하십시오. 나는 강력하게 당신이하지 않는 것이 좋습니다. 물론, 속성은 실제 컨텍스트에서 유용 할 수 있습니다.

+0

좋은 예입니다. 모바일 장치에 이러한 예를 작성하는 것은 어렵습니다. – rekire

+0

그래도 그 일을 할 수는 있지만 가능하면 코드 양을 줄여서 T4 템플릿을 만들었습니다. – Bastian

+0

@Bastian : 이와 같은 속성이 코드의 상당 부분을 차지합니까? 그렇다면 재 설계가 필요할 수도 있습니다. * lines *의 수를 줄이고 싶다면 항상 한 줄에'Mustang' 생성자 전체를 넣을 수 있습니다. 또는 속성을 사용할 수도 있습니다. –

1

기본 클래스 생성자를 호출해야하는 construtor를 통해이 작업을 수행 할 수 있습니다.

class car { 
    Public string Name {public get; protected set} 
} 

기본적으로 작동해야합니다.

public abstract class Car 
{ 
    public string Name { get; private set; } 

    protected Car(string name) 
    { 
     this.Name = name; 
    } 
} 

public class Mustang : Car 
{ 
    public Mustang() : base("Mustang") 
    { 
    } 
} 

편집 :

+0

그러나 생성자 버전을 선호합니다. 즉, 생성 후에 이름이 변경되지 않는다는 것을 보장 할 수 있습니다. –

관련 문제