作者热门文章
- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我想要一个通用的打印函数...PrintGeneric(T)...在下面的例子中,我缺少什么?
一如既往地感谢您的帮助/见解...
public interface ITest
{}
public class MyClass1 : ITest
{
public string myvar = "hello 1";
}
public class MyClass2 : ITest
{
public string myvar = "hello 2";
}
class DoSomethingClass
{
static void Main()
{
MyClass1 test1 = new MyClass1();
MyClass2 test2 = new MyClass2();
Console.WriteLine(test1.myvar);
Console.WriteLine(test2.myvar);
Console.WriteLine(test1.GetType());
PrintGeneric(test1);
PrintGeneric<test2.GetType()>(test2);
}
// following doesn't compile
public void PrintGeneric<T>(T test)
{
Console.WriteLine("Generic : " + test.myvar);
}
}
最佳答案
它无法编译,因为 T 可以是任何东西,而且并不是所有东西都有 myvar
字段。
你可以使 myvar
成为 ITest
的属性:
public ITest
{
string myvar{get;}
}
并将其作为属性在类上实现:
public class MyClass1 : ITest
{
public string myvar{ get { return "hello 1"; } }
}
然后在您的方法上放置一个通用约束:
public void PrintGeneric<T>(T test) where T : ITest
{
Console.WriteLine("Generic : " + test.myvar);
}
但在那种情况下,老实说,你最好只通过 ITest:
public void PrintGeneric(ITest test)
{
Console.WriteLine("Generic : " + test.myvar);
}
关于C# : Passing a Generic Object,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9664912/
我是一名优秀的程序员,十分优秀!