2012-02-28 7 views
1

명시 적으로 각 할당 가능한 속성을 하나씩 할당 할 필요없이 기본 클래스의 변수에서 파생 클래스의 기본 부분을 할당하는 방법을 찾고 있습니다. 다른 방법을 두십시오 : 기본 클래스의 변수부터 시작하여, 할당 가능한 모든 기본 속성 집합이있는 파생 클래스의 변수로 끝내고 싶습니다. 코드를 편집하지 않고 코드를 편집해야합니다. 변화.파생 클래스의 기본 부분에 할당

편집하려는 엔터티의 기본 클래스에서 파생 클래스로 뷰 모델을 만듭니다. 일반적으로 탐색 속성에 대한 ID를 추가하여 POST에서 반환 할 수 있습니다. 예를 들면 : 나는 기본 클래스 Thing에 속성을 추가하고 나는 ThingEditView를 초기화 할 경우 모든 장소를 편집하는 것을 잊지 때 문제로 실행

var foo = new ThingEditView 
{ 
    UsefulID = thisThing.Useful.ID, 
    A = thisThing.A, 
    B = thisThing.B, 
    /* and potentially many more properties from the base class Thing */ 
}; 
return View(foo); 

그러나 :

public class ThingEditView : Thing 
{ 
    public int UsefulID { get; set; } 
} 

은 다음과 같이 사용됩니다 또는 ThingDetailView는 등 내가

var foo = new ThingEditView 
{ 
    base = thisThing, 
    UsefulID = thisThing.Useful.ID 
}; 

을 말하고 할당 필드하는 컴파일러 그림을 수 있도록 할 수 싶어요. 이것을 할 수있는 방법이 있습니까?

통찰력을 가져 주셔서 감사합니다!

+2

[AutoMapper] (http://automapper.org/)가 도움이 될 수 있습니다. –

+0

동의, Automapper 같은 유일한 방법입니다 – swannee

+0

감사 앙드레 (bedanke mich)와 에릭. AutoMapper는 내가 원했던 것보다 조금 더 무거워 보였습니다. 이상하게도 C#에서는 이것을 직접 말할 수있는 방법이 없습니다. C 일 동안 나는'memcpy (... sizeof (Thing)) '에 도달 할 것입니다. –

답변

2
void Main() 
{ 
    var thisThing= new ThingEditView {UsefulID = 1, A = 2, B = 3}; 
    var foo = new ThingEditView(thisThing); 

    //foo.Dump(); 
} 

// Define other methods and classes here 
public class Thing 
{ 
    public int A {get; set;} 
    public int B {get; set;}   
    public Thing() {} 
    public Thing(Thing thing) 
    {  
    this.A = thing.A; 
    this.B = thing.B; 
    } 
} 

public class ThingEditView : Thing 
{ 
    public int UsefulID {get; set;} 
    public ThingEditView() {} 
    public ThingEditView(Thing thing) : base(thing) { 

    } 
    public ThingEditView(ThingEditView view) : base(view) { 
     this.UsefulID = view.UsefulID; 
    } 
} 

나는 자동 작성기를 선택합니다.

+0

애드리안에게 감사드립니다. 이것은 훌륭하지만 'ThingEditView'의 생성자를 편집하여 'Thing'에 대한 편집을 추적해야합니다. –

+0

제가 이해할 수있을 지 모르겠습니다. Thing 생성자는 자체 속성을 복사하고 상속자가 기본 (보기) –

+1

을 통해이 코드를 호출하는 데 도움을줍니다. 걱정하지 마십시오 ... 저는 섭취가 느립니다. 이것은 내가 찾고있는 것입니다. 감사!! –

관련 문제