Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/257.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#通用方法 在C++中,这是工作的。 template<class T> void func(T t) { t.method(); } 模板无效函数(T) {t.method();}_C#_Generics - Fatal编程技术网

C++;模板与具有各种参数的C#通用方法 在C++中,这是工作的。 template<class T> void func(T t) { t.method(); } 模板无效函数(T) {t.method();}

C++;模板与具有各种参数的C#通用方法 在C++中,这是工作的。 template<class T> void func(T t) { t.method(); } 模板无效函数(T) {t.method();},c#,generics,C#,Generics,如何在C#中实现这一点?这是我试过的,但不起作用 void func<T>(T t) { t.method(); } void函数(T) {t.method();} 或者在C#?中不可能做到这一点,以下方法应该有效 public static class MyClass { public static void MyMethod<T>(T t) where T : class { t.ToString(); // Note: for this to

如何在C#中实现这一点?这是我试过的,但不起作用

void func<T>(T t)
{ t.method(); }
void函数(T)
{t.method();}

或者在C#?

中不可能做到这一点,以下方法应该有效

public static class MyClass
{
  public static void MyMethod<T>(T t) where T : class
  {
     t.ToString(); // Note: for this to work we need to KNOW the type which defines `method`.
  }
}

以下几点应该有效

public static class MyClass
{
  public static void MyMethod<T>(T t) where T : class
  {
     t.ToString(); // Note: for this to work we need to KNOW the type which defines `method`.
  }
}

在采用泛型参数的方法中,您只能对编译器知道将存在的参数调用方法

在您的示例中:

void func<T>(T t)
{
    t.method();
}

在采用泛型参数的方法中,您只能对编译器知道将存在的参数调用方法

在您的示例中:

void func<T>(T t)
{
    t.method();
}
<> > C中的泛型与C++中的模板不一样。C++模板本质上是马科斯,根据编译时使用的类型,在编译时应用于代码。因此,如果您试图在没有
.method()
方法的类上使用模板,它将在编译时失败

C#泛型要求无论
T
可能是什么类型,都必须定义泛型方法使用的任何方法和属性。因此,如果您有一个定义
.method()
方法的基类型或接口,您可以将泛型方法约束到该类型:

void func<T>(T t) where T:IHaveMethod
{ t.method(); }
现在,不仅调用了
method
,而且返回类型正是泛型参数的类型,而不仅仅是
IHaveMethod
,这可能会限制您在不强制转换的情况下对返回的操作

<>底线,不要用泛型思维方式来看待C++模板。有非常根本的差异,这将使你更难看到何时何地可以使用泛型。

< p>泛型在C++中与C++中的模板不一样。C++模板本质上是马科斯,根据编译时使用的类型,在编译时应用于代码。因此,如果您试图在没有
.method()
方法的类上使用模板,它将在编译时失败

C#泛型要求无论
T
可能是什么类型,都必须定义泛型方法使用的任何方法和属性。因此,如果您有一个定义
.method()
方法的基类型或接口,您可以将泛型方法约束到该类型:

void func<T>(T t) where T:IHaveMethod
{ t.method(); }
现在,不仅调用了
method
,而且返回类型正是泛型参数的类型,而不仅仅是
IHaveMethod
,这可能会限制您在不强制转换的情况下对返回的操作

<>底线,不要用泛型思维方式来看待C++模板。有一些非常基本的差异,这会让你很难知道何时何地可以使用泛型

T func<T>(T t) where T:IHaveMethod
{ t.method(); return t;}