【发布时间】:2008-11-18 20:16:57
【问题描述】:
我怎样才能选择好的方法(我在下面的示例中显示了 2 种不同的方法不起作用)。我使用而不是带有 IF 和 IS 的 Object 类型的变量来完成这项工作,但我试图避免使用 Object 和装箱/拆箱。所以我认为 Generic 可以完成这项工作,但我被困在这里。
这是说明我的问题的一小段代码:
class Program
{
static void Main(string[] args)
{
Parser p = new Parser();
ObjectType1 o1 = new ObjectType1();
p.execute(o1);
Console.Read();
}
}
class Parser
{
public T execute<T>(T obj)
{
/*
if (obj is ObjectType1)
this.action((ObjectType1)obj);
else if (obj is ObjectType2)
this.action((ObjectType2)obj);
*/
this.action(obj);
return obj;
}
private void action(ObjectType1 objectType1)
{
Console.WriteLine("1");
}
private void action(ObjectType2 objectType2)
{
Console.WriteLine("2");
}
}
class ObjectType1
{
}
class ObjectType2
{
}
更新
我不想要接口和类。对不起。我知道这不是问题的目标。
使用 (ObjectType)obj 进行投射不起作用,但如果你这样做:
if (obj is ObjectType1)
this.action(obj as ObjectType1);
else if (obj is ObjectType2)
this.action(obj as ObjectType1);
它有效...为什么?
而且...我不能为所有类型重载执行方法,因为此方法来自接口。这就是为什么所有都需要从这个方法中调用。
【问题讨论】:
-
对象没有装箱和拆箱——它不是一个值类型。我只是删除泛型或重载方法
-
对象到真实类型......在将真实类型操作到对象之后......
-
无论如何都没有拳击。这里没有值类型,因此没有装箱。
-
它是一个真实的对象--->以对象类型操作数据的解析器---->返回真实的对象。我看到一些从真实对象到对象的转换,而不是从对象到真实对象到过程的转换(对于这个问题,代码有点 sn-p)。所以是的,它确实有一些装箱/拆箱。
-
csharphelp.com/archives/archive100.html 一些装箱/拆箱参考。
标签: c# .net generics .net-2.0 c#-2.0