为啥我不能在 C# 应用程序中使用泛型类型作为入口点?

Posted

技术标签:

【中文标题】为啥我不能在 C# 应用程序中使用泛型类型作为入口点?【英文标题】:Why I cannot use as entry point in C# app a generic type?为什么我不能在 C# 应用程序中使用泛型类型作为入口点? 【发布时间】:2015-03-18 17:10:15 【问题描述】:

在 C# 中,方法 Main 必须是非泛型类型才能被选为入口点。这是为什么呢?

我对此有点困惑,因为这在 Java 中是可能的(函数 main() 可以在泛型类中)。

namespace ConsoleApplication

    class Program<T> //incorrect
    
        static void Main(string[] args)
        
        
    

【问题讨论】:

您为什么要这样做?逻辑是什么?你不能指望它知道T 应该是什么,也不能指望它“默认”为object 或其他任何东西。 您认为操作系统会选择哪种类型来启动程序? 创建类时T应该如何选择?它可以在 java 中工作,因为泛型类型在运行时被删除。 @CodeCaster 是的,我相信是的。但这并不重要。有些东西必须调用它,有些东西需要知道T,但它没有。 据我了解,快速检查泛型类中的 Java 静态方法,Java 实际上并没有为每种类型创建不同的方法实现,而是静态方法对于一般类型是相同的.静态类型也不能用于 Java .Net (C#) 的静态方法中,它确实为泛型类型创建了特定的静态方法。 Type 也可以在方法内部使用(静态变量也有自己的每个类型的值)。然而,这确实意味着要使用静态方法,C# 必须知道它的类型(程序不知道),而 java 不需要知道。 【参考方案1】:

Main 方法作为操作系统的固定接口,它本身没有选择和指定类型作为参数的机制。

【讨论】:

以上是关于为啥我不能在 C# 应用程序中使用泛型类型作为入口点?的主要内容,如果未能解决你的问题,请参考以下文章

为啥 C# (4.0) 不允许泛型类类型中的协变和逆变?

为啥我不能在继承属性中为封闭的泛型使用 C# 语法,但 CLR 语法很好

C# 深入了解泛型

为啥类型不能分配给泛型类型

Java 泛型与 C++ 模板有何不同?为啥我不能使用 int 作为参数?

在 C# 中使用枚举作为泛型类型参数 [重复]