Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#在泛型方法中调用以指定类型为参数的某个方法_C#_Generic Method - Fatal编程技术网

C#在泛型方法中调用以指定类型为参数的某个方法

C#在泛型方法中调用以指定类型为参数的某个方法,c#,generic-method,C#,Generic Method,我是C#的初学者,有个问题一直困扰着我 如果有人提出解决方案,我将不胜感激 我有一个类似这样的代码: public class SomeClass { public SomeClass() { GenericMethod<Object1>(out result); .... } public void GenericMethod<T>(out Result result) where T : Parent { T t =

我是C#的初学者,有个问题一直困扰着我

如果有人提出解决方案,我将不胜感激

我有一个类似这样的代码:

public class SomeClass 
{ 
  public SomeClass()
  {
    GenericMethod<Object1>(out result);
    ....
  }
  public void GenericMethod<T>(out Result result) where T : Parent
  {
     T t = new T();
     //do something need to be done all parent's child object ( Object1, Object2..)
     ...somthing same things...
     //and do specific things to be done relatively
     Handle(t, result);
  }
  // Object1 is child of Parent
  private void Handle(Object1 arg1, out Result result)
  {
    //do something need to be done for Object1;
  }
  // Object1 is child of Parent
  private void Handle(Object2 arg1, out Result result)
  {
    //do something need to be done for Object2;
  }
  ....
}
公共类SomeClass
{ 
公共类()
{
通用方法(输出结果);
....
}
public void GenericMethod(输出结果),其中T:Parent
{
T=新的T();
//所有父对象的子对象(Object1、Object2..)都需要执行某些操作
…同样的事情。。。
//做一些比较具体的事情
处理(t,结果);
}
//Object1是父对象的子对象
私有无效句柄(Object1 arg1,out结果)
{
//为Object1做一些需要做的事情;
}
//Object1是父对象的子对象
私有无效句柄(Object2 arg1,输出结果)
{
//为Object2做一些需要做的事情;
}
....
}
你会发现, 我想做的很简单

在GenericMethod中使用类型T生成指定值, 并调用指定的句柄方法。 它将在C++中工作,但是C总是告诉我类似

“无法将'T'表达式转换为'Object1'类型”

我怎样才能解决这个问题?
提前/.P> > P>这是因为C++的泛型方法和类型是编译类型构造的。因此,当您调用GenericMethod时,编译器将为您构建该代码,并知道要调用的which Handle方法

<> >编译器在为您构建方法之后,C++代码将是这样的:

public class SomeClass 
{ 
  public SomeClass()
  {
    GenericMethod<Object1>(out result);
    ....
  }
  public void GenericMethod<Object1>(out Result result)
  {
     Object1 t = new Object1();
     Handle(t, result);
  }
  private void Handle(Object1 arg1, out Result result)
  {
    //do something need to be done for Object1;
  }
  private void Handle(Object2 arg1, out Result result)
  {
    //do something need to be done for Object2;
  }
  ....
}

有关C++和C++泛型的更多信息,你可以查看一下

当你的方法不是一般的泛型时,为什么需要泛型方法?泛型意味着无论对象的类型是什么,我都会做同样的事情。在您的情况下不是。如果有人调用了
GenericMethod
或其他未处理的类型,您希望发生什么?这只是正常行为,因为您的t对象可以是具有默认构造函数的任何类型。@srramsakthivel实际上我的泛型并不适用于所有类型,但在从父类派生的类型中,执行相同的操作,并有一个稍微不同的想法去做一些事情。这就是我想要的。嗯..@Jon Skeet可能是我的例子不足以解释我的情况。对不起,我修改了。谢谢。若C#Generic是在运行时生成的,那个么我可能并没有选择,但确实需要对指定句柄类中调用的基类执行操作。。它将是私有的void句柄(Object1 arg1,out Result Result){doSameThingForBaseClass();}private doSameThingForBaseClass(){}
public void GenericMethod<T>(out Result result) where T : new(), BaseClass
{
     T t = new T();
     Handle(t, result);
}
private void Handle(BaseClass arg1, out Result result)
{
    //do something need to be done for BaseClass;
}