我有一个现有的C#泛型类,并希望根据使用的类型添加或删除方法,我解释
while (row_no < result.Tables[ind].Rows.Count)
{
for (int i = 0; i < result.Tables[ind].Columns.Count; i++)
{
csvData += result.Tables[ind].Rows[row_no][i].ToString() + "|";
string text = result.Tables[ind].Rows[row_no][i].ToString();
csvData += text.Replace("\r\n", " ") + "|";
}
row_no++;
csvData += "\n";
}
对于特定的public class MyType<T>
{
public T getValue() { return value; }
}
,我希望“删除”“getValue”方法。
这样的事情是否存在?
答案 0 :(得分:4)
不,但你可以用接口
完成类似的事情interface IMyType
{
//...what ever method/properties are shared for all
}
public class MyType<T> : IMyType
{
public T getValue() { return value; }
//...shared methods
}
public class MyTypeOtherSide : IMyType
{
//...shared methods
}
然后你需要将变量声明为IMyType,并且当你知道它属于那种类型时才使用MyType<T>
答案 1 :(得分:0)
使用泛型的目的是拥有一个适用于所有类型的泛型类型声明,而不仅仅是几个类型。
我想你只想对数字进行操作。您可以在类中添加通用约束,如下所示:
public class MyType<T> where T: struct
{
public T getValue() { return value; }
}
但是,这也允许具有通用参数void
的类型具有GetValue
- 方法,因为void
也是struct
。然而,这不会受到伤害,因为你不能像Lee所提到的那样构造一个类型MyType<void>
。
此外,没有所有数字类型实现的公共接口,并且可以用作通用约束。唯一的解决方法是为每种类型都有一个方法,所以GetDouble,GetInt等等