[英]Is using one generic method or multiple overloaded methods more appropriate?
我正在一個項目中工作,我將在其中處理多種類型的數學值,例如小數,十進制數和數學常數(即pi,歐拉數)。
我已經用此代碼創建了一個抽象基類,每個這些基類都將繼承自該基類。
public abstract class MathValue
{
public abstract double Value { get; set; }
protected bool irrational;
public virtual bool IsIrrational
{
get { return this.irrational; }
}
public virtual T ToValueType<T>(bool ignoreConstraints) where T : MathValue;
public abstract MathValue Add<TParam>(TParam val) where TParam : MathValue;
public abstract MathValue Subtract<TParam>(TParam val) where TParam : MathValue;
public abstract MathValue Multiply<TParam>(TParam val) where TParam : MathValue;
public abstract MathValue Divide<TParam>(TParam val) where TParam : MathValue;
}
但是,我現在在質疑在這里使用通用方法是否合適,或者是否應該在每個派生類中用重載方法替換這些方法。
在這種情況下哪個更合適?
通常,我覺得重載最適合需要基於類型自定義功能的場景,而泛型則適用於不依賴類型且在類型間共享的功能。
一個基於輸入參數執行不同操作的重載類的很好的例子是靜態的Convert
類方法,例如ToInt32
,它具有32個重載。
一個對任何類型都執行相同操作的泛型類的一個很好的例子是List<T>
,它可以讓您以強類型的方式將任何類型放入List中,對任何類型T都采用相同的方式。
返回ToString()
值的示例:
如果要為每種類型分別輸出ToString()
),則對不同的參數類型使用不同的重載(甚至不同的類):
public class MyMathClass
{
public string GetToString(int myValue)
{
return "My Int: " + myValue;
}
public string GetToString(double myValue)
{
return "My Double: " + myValue;
}
}
如果我想為任何對象輸出ToString,由於任何對象都具有ToString()
方法,因此我可能不使用泛型。但是出於示例的原因,我將:
public class MyMathClass<T>
{
public void GetToString<T>(T myValue)
{
return myValue.ToString();
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.