C# : Passing a Generic Object

标签 c# generics methods

我想要一个通用的打印函数...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/

相关文章:

c# - 如何以编程方式获取解决方案中使用的 NuGet 包的版本?

c# - .NET Framework 内置接口(interface),构建自定义数据结构时的建议?

python - 在 Python 中使用 pandas 和 datetime 从字符串中获取时间信息

java - 当 CountDownTimer 用作方法时停止它

c# - 如何在 C# 中将 t-sql 的 "tinyint"转换为整数?

c# - 从 C# 在 PHP 中解密的字符编码问题

C# 泛型多态

java - 通用可调用

c# - C# 中的受约束泛型委托(delegate)

java - 如何在不创建子类和/或继承类的情况下从另一个类调用对象的方法?