c# - 如何在 C# 中编写泛型方法及其默认等效项

标签 c# class inheritance

我认为这个例子非常简单并且展示了我想要实现的目标:

public class A : A<object>
{
    // public static A GetInstance() => new A();
    // I can't do this, because cannot override static methods
}

public class A<T>
{
    public static A<T> GetInstance() => new A<T>();

    // public static A GetInstance() => new A();
    // can't do this, because it says that the method is already defined
}

我基本上希望能够使用 GetInstance 方法有两种方式:

  • 指定类型 T : A<T>.GetInstance()A.GetInstance<T>() (哪个无关紧要)- 哪个应该返回类型 A<T>
  • 不指定此类型:A.GetInstance() - 它应该返回类型 A .

我怎样才能做到这一点?

最佳答案

using System;

public class Program
{
    public static void Main()
    {
        Console.WriteLine(A.GetInstance());
        Console.WriteLine(A<int>.GetInstance());
        Console.WriteLine(A.GetInstance<bool>());
        /*
            output :
            Program+A
            Program+A`1[System.Int32]
            Program+A`1[System.Boolean]
        */
    }

//类

    public class A : A<object>
    {
        // non-generic method in non-generic class
        public static A GetInstance() 
        {
            return new A();
        }

        // generic method
        public static A<T> GetInstance<T>() 
        {
            return new A<T>();
        }
    }

    public class A<T>
    {
        // non-generic method in generic class
        public static A<T> GetInstance() 
        {
            return new A<T>();
        }
    }
}

关于c# - 如何在 C# 中编写泛型方法及其默认等效项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31315936/

相关文章:

c# - 使用 EasyNetQ.Hosepipe 时有没有办法指定不同的错误队列?

c# - 将不同的 ID 复制到列表

java - 在 Java 中创建通用 Iostream 类

java - 特许经营类的compareTo方法

java - 如何修复错误: non-static variable this cannot be referenced from a static context near Horse d = new Horse ();

c# - 如何禁用深度缓冲区?

c# - 创建未定义长度的 C# 对象数组?

python - 类和函数范围

c++ - 创建行为类似于 stringstream 的类的最简单方法

javascript - 原型(prototype)继承(javascript)