【发布时间】:2014-12-15 17:17:56
【问题描述】:
我有一个基本的过滤器类,它存储一个string 参数名称和一个通用的T 值。过滤器有一个 Write(writer As IWriter) 方法,它将过滤器的内容写入 HTML 页面。 Write 方法有两个重载,一个接受两个字符串,一个接受一个字符串和一个对象。这让我可以自动引用字符串。
问题是,当我调用writer.Write(ParameterName, Value) 而T 是string 时,它调用的是字符串/对象的重载,而不是字符串/字符串!如果我直接在writer 上调用Write 方法,它会按预期工作。
这是 C# 中的 SSCE。我在 VB 和 C# 中都测试过,发现同样的问题
void Main() {
FooWriter writer = new FooWriter();
Filter<string> f = new Filter<string>() {ParameterName = "param", Value = "value"};
f.Write(writer); //Outputs wrote w/ object
writer.Write(f.ParameterName, f.Value); //Outputs wrote w/ string
}
class FooWriter {
public void Write(string name, object value) {
Console.WriteLine("wrote w/ object");
}
public void Write(string name, string value) {
Console.WriteLine("wrote w/ string");
}
}
class Filter<T> {
public string ParameterName {get; set;}
public T Value {get; set;}
public void Write(FooWriter writer) {
writer.Write(ParameterName, Value);
}
}
【问题讨论】:
标签: c# vb.net generics overloading