2013-09-29 192 views
0

假設我有一個基類'Person'和3個派生類,'Student','Teacher'和'Administrator'。如何高效地創建派生類

在創建新人的客戶端的Web應用程序中,在服務器端,創建所需子類的最有效方式是什麼,而不必爲每個子類重複所有基類屬性。下面的例子中,我不得不重複每個子類的Name,DOB和Address屬性。

void CreatePerson(someDto dto) 
{ 
    Person person; 

    if (dto.personType == 1) 
    { 
     person = new Student() { .. }; 
     person.Name = ""; 
     person.DOB = ""; 
     person.Address = ""; 
    } 
    else if (dto.personType == 2) 
    { 
     person = new Teacher() { .. }; 
     person.Name = ""; 
     person.DOB = ""; 
     person.Address = ""; 
    } 
    else if (dto.personType == 3) 
    { 
     person = new Administrator() { .. }; 
     person.Name = ""; 
     person.DOB = ""; 
     person.Address = ""; 
    } 

    // Do something with person.. 
} 

回答

5

您可以將常用的東西,出來的if/else

if (dto.personType == 1) 
    { 
     person = new Student() { .. }; 
    } 
    else if (dto.personType == 2) 
    { 
     person = new Teacher() { .. }; 

    } 
    else if (dto.personType == 3) 
    { 
     person = new Administrator() { .. }; 
    } 

    person.Name = ""; // I believe these 3 properties will come from dto 
    person.DOB = ""; 
    person.Address = ""; 
+0

感謝@Tilak。此外,在if塊中設置派生類屬性時,似乎我必須在大括號內完成此操作。我不能說'person = new Student(); person.studentProperty = ...'是否需要在捲曲的內部創建派生類屬性? – Grant

+0

是的,[對象初始化程序](http://msdn.microsoft.com/en-us/library/vstudio/bb384062.aspx) – Tilak

+1

@ Grant實際上,這應該有效。 'x = new Type(){Property1 = value,Property2 = value}''是寫'x = new Type(); x.Property1 =值; x.Property2 =值;'。兩者都應以相同的方式工作。 – poke