2012-06-18 58 views
0

我有一個基類是這樣的:如何將這n個方法改爲單一的通用方法?

public class BaseResponse 
{ 
    public string ErrorMessage { set;get;} 
} 

而一些子類,從這個繼承:

public class Person:BaseResponse 
{ 
    public string FirstNAme { set;get;} 
} 

public class Phone:BaseResponse 
{ 
    public string SerialNumber { set;get;} 
} 

public class Car :BaseResponse 
{ 
    public string Year{ set;get;} 
} 

現在我想這個類的每個實例的ErrorMessage屬性設置爲不同的值。目前,這是我在做什麼:

public Phone GetPhoneError(Phone objPhone) 
{ 
    objPhone.ErrorMessage="Err msg related to Phone"; 
    return objPhone; 
} 

public Person GetPersonError(Person objPerson) 
{ 
    objPerson .ErrorMessage="Err msg related to Person"; 
    return objPerson ; 
} 

... another similar method for Car also 

有什麼辦法可以讓這個方法的通用格式,這樣我不需要設置錯誤消息3種單獨的方法?

+2

爲什麼被稱爲方法'碰... Error' *設定*錯誤? – asawyer

+1

也許在基類上使用虛擬方法?根據需要進行覆蓋。改爲設置this.ErrorMessage。 –

+0

如果你想要繼承'BaseResponse'的每個類都有一個通用的方法,它有自己的*名稱*方法,那麼否,我不相信你一般可以做到這一點。 –

回答

2
public T GetError<T>(T obj) where T: BaseResponse 
{ 
    obj.ErrorMessage= string.Format("Err msg related to {0}", typeof(T).Name); 
    return obj; 
} 

我不知道是否該錯誤信息是這樣的通用東西什麼的習慣。如果是這樣,則將該消息作爲參數傳遞。

爲什麼你需要一個這樣的方法?是因爲你簡化了這個問題嗎?

+0

謝謝。 +1。這是我正在尋找的。對不起,我的問題有點混亂 – Happy

1

你應該能夠有一個通用的方法,像這樣:

public object GetError(BaseResponse response) 
{ 
    response.ErrorMessage = "whatever"; 
    return response; 
} 
+0

但是,我必須將它CAST回到原來的類型,無論我稱之爲什麼。任何其他選項? – Happy

+0

當您將其拉出時,我不知道如何在沒有CAST的情況下處理該問題。 –

2

所以在你的基類中,你應該創建一個名爲SetError的虛擬方法(你的GetError但是有正確的符號)。

public abstract string GetErrorMessage(); //In Base Class so that why each implementation will set the correct error message 

然後在你的基類中 - 爲什麼你需要返回你正在修改的同一個對象?

public virtual void SetErrorMessage() 
{ 
    this.ErrorMessage = GetErrorMessage(); 
} 
+0

+1謝謝。它有幫助 – Happy

1

爲什麼不把財產virtual並沒有必要在這種情況下set? :

public class BaseResponse 
{ 
    public virtual string ErrorMessage { get;} 
} 


public class Person:BaseResponse 
{ 
    ..... 
    public override string ErrorMessage {get { return "Err msg related to Person";}} 
} 


public class Phone:BaseResponse 
{ 
    ...... 
    public override string ErrorMessage {get { return "Err msg related to Phone";}} 
} 

等爲他人....

相關問題