为啥我不能在 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# 语法,但 CLR 语法很好