C# 泛型类和泛型方法 类测试,其中T:class { 公共空写() { Console.Write(typeof(T).FullName); } }
在上面的类中,可以为类传入字符串(C# 泛型类和泛型方法 类测试,其中T:class { 公共空写() { Console.Write(typeof(T).FullName); } },c#,generics,C#,Generics,在上面的类中,可以为类传入字符串(test test=new test),然后为方法传入int?如果是,输出是什么?如果没有,这会导致什么问题?尽管经常使用泛型(在我自己的类中)和泛型集合,但我实际上并没有尝试过这种方法 我编写/查看泛型类的方式如下: class test <T> where T : class { public void Write<T>() { Console.Write(typeof(T).FullName);
test test=new test
),然后为方法传入int?如果是,输出是什么?如果没有,这会导致什么问题?尽管经常使用泛型(在我自己的类中)和泛型集合,但我实际上并没有尝试过这种方法
我编写/查看泛型类的方式如下:
class test <T> where T : class
{
public void Write<T>()
{
Console.Write(typeof(T).FullName);
}
}
class,其中T:class
{
公共文件不能写()
{
Console.Write(T.ToString());
}
}
您需要在方法中分别向类声明一个类型变量-
class <T> where T : class
{
public T Write()
{
Console.Write(T.ToString());
}
}
类测试,其中T:class{
公共作废法(U val){
Console.WriteLine(typeof(U).FullName);
}
}
正如最初编写的一样,不,您不能。为了在类中的不同点使用不同的类型,必须具有多个泛型参数。可以在方法级别定义一个不同的方法,并使您的示例正常工作
class Test<T> where T : class {
public void Method<U>(U val) {
Console.WriteLine(typeof(U).FullName);
}
}
类测试,其中T:class{
公共无效写入(U arg1){
Console.WriteLine(arg1.ToString());
}
}
用法
var t=newtest();
t、 写作(42);
正如Scott指出的,您可以使用相同的命名参数。虽然这样做会引起警告,一般来说会让人困惑。为当前范围内的所有泛型参数指定不同的名称要干净得多。我实际上并没有尝试做任何事情。今天我不得不参加C#考试,我提出了一个与我建议的非常相似的问题/代码。我不确定答案,所以我想在这里问一下。不幸的是,我记不清代码的原样。如果你看一下这个方法,“t”实际上是一个方法参数。它与类的参数同名,因此将生成警告。然而,这在这里实际上并不违法。(尽管我会像你建议的那样建议将其重命名为U)@Scott,我实际上认为C#会在那里发出错误而不是警告。奇怪的:(
class Test<T> where T : class {
public void Write<U>(U arg1) {
Console.WriteLine(arg1.ToString());
}
}
var t = new Test<string>();
t.Write(42);