C++;模板与具有各种参数的C#通用方法 在C++中,这是工作的。 template<class T> void func(T t) { t.method(); } 模板无效函数(T) {t.method();}
如何在C#中实现这一点?这是我试过的,但不起作用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
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;}