2012-07-23 54 views
2

所以我得到了一個類人,它包含年齡,性別,姓名(和主鍵ID)。 後來我得到2子類人:函數與子類參數

Teacher(Class(French, math, english etc etc), Sick(boolean)) 

student(Class(French, math, english etc etc), Sick(boolean)) 
//so these 2 got the same 5 fields. 

現在我想打1層的方法,它可以創建他們的所有2。 (在實踐中,甚至更多,但奧凱的問題,我會只使用這2個)

這是我想到的是:

public Person CreateNewPerson (int age, boolean sex, string name, int class, boolean sick, HELP HERE plz OFTYPE<TEACHER OR STUDENT>) 
{ 
    var Person1 = new Person { Age = age, Sex = sex, ....... }; 
    // but now to return it as the correct type I got no clue what todo 
    return (OFTYPE)Person1; // ofc this doesn t work but I hope you understand the problem here 
} 

希望有人能夠幫助我在這裏,是因爲ATM我我爲每個子類別製作了一個獨立的CreateNewTeacherCreateNewStudent等等(我得到了他們中的5個^^)

在此先感謝!

PS:他們後來保存在不同的表,我並不想要他們都在同一個班,因爲我知道我可以去,並添加喜歡的人一個布爾值:IsPersonChild,然後真或FLASE但吶^ h

+2

這功課嗎? – albertjan 2012-07-23 08:49:23

+0

不是真的我正在研究一個項目,我們正在製作一個WCF服務,它從EF模型獲取它的數據,但是我們在對象上使用了繼承,所以他們從來沒有使用過相同的ID。我這樣做的項目是smartp1ck(dot)com。我只是寫了這個快速解釋我的問題,我必須承認它看起來像家庭作業^^。 – Maximc 2012-07-23 08:54:56

+0

只是想知道 - 你的課只是名稱不同,或者他們有不同的行爲? – 2012-07-23 09:14:47

回答

4

建議類設置:

public class Person 
{ 
    public string Name { get; set; } 
} 

public class Teacher : Person 
{ 
} 

public class Student : Person 
{ 
} 

public static class PersonFactory 
{ 
    public static T MakePerson<T>(string name) where T: Person, new() 
    { 
     T person = new T {Name = name}; 
     return person; 
    } 
} 

用法:

Teacher teacher = PersonFactory.MakePerson<Teacher>("Mrs. Smith"); 

Student student = PersonFactory.MakePerson<Student>("Johnny"); 
+1

注意:如果子類有不同的參數,使用工廠甚至可以處理if(typeof(T)== typeof(Teacher) ' – Liron 2012-07-23 09:02:23

+0

奧克感謝這解決了它,也需要與typeof的評論,因爲我確實有不同的thx參數不同的子類,我會稍後在我的WCF服務thx – Maximc 2012-07-23 12:41:52

1

使用可以使用泛型這樣的:

public T CreateNewPerson<T> (int age, boolean sex, string name, int class, boolean sick) where T : Person, new() 
{ 
    var Person1 = new T { Age = age, Sex = sex, ....... }; 
    return Person1; 
}