我遇到了一個情況,答案應該是非常直接的,但它沒有我。MVC 3簡單繼承
public class Note
{
#region Properties
public int Id { get; set; }
public int ClientId { get; set; }
public int CandidateId { get; set; }
public int TypeId { get; set; }
public DateTime DateCreated { get; set; }
public string UserId { get; set; }
public string UserName { get; set; }
public string Message { get; set; }
#endregion
#region Methods
public void Save()
{
}
#endregion
}
public class History : Note
{
}
正如您所見,History繼承了Note。它們完全一樣,兩者之間的唯一區別是類型ID。
我從數據庫中獲取數據時
public static Note Parse(SqlDataReader dr)
{
int TypeId = Convert.ToInt32(dr["TypeId"]);
Note Note;
if (TypeId == 1)
Note = new Note();
else
Note = new History();
Note.Id = Convert.ToInt32(dr["Id"]);
Note.TypeId = TypeId;
if (dr["ClientId"] != DBNull.Value) Note.ClientId = Convert.ToInt32(dr["ClientId"]);
if (dr["CandidateId"] != DBNull.Value) Note.CandidateId = Convert.ToInt32(dr["CandidateId"]);
Note.DateCreated = Convert.ToDateTime(dr["DateCreated"]);
Note.UserId = Convert.ToString(dr["UserId"]);
Note.UserName = Convert.ToString(dr["UserName"]);
Note.Message = Convert.ToString(dr["Message"]);
return Note;
}
然後我的MVC頁上有這樣的功能,我有這樣的:
<ol id="interview-comments">
@foreach (Note Note in Model.Notes().OfType<Note>())
{
}
</ol>
<ol id="history-comments">
@foreach (History Note in Model.Notes().OfType<History>())
{
}
</ol>
我的問題很簡單。這是做到這一點的正確方法嗎?
/r3plica
一樣的答案說,你應該_not_做這種方式。一般來說,我發現繼承可以咬你,所以如果可能的話,我傾向於遠離它。 –
@ jesus.tesh,沒有必要「遠離」繼承恕我直言,但只有在適當時才使用它。不要使用螺絲刀錘釘...;) – Lucero
@Lucero - 當然,我不是聲稱不應該使用繼承。爲這項工作使用正確的工具,對吧? :) –