C#相当于VB公共模块,请用太多

C#相当于VB公共模块,请用太多,c#,vb.net,C#,Vb.net,我正在将VB.net库转换为C#,并且很难找到与VB.net公共模块等效的C# 在同一个VB类中,有一个With块。你知道这一点的等价物是什么吗 短暂性脑缺血发作 Steve Campos没有与等效的 根据版本,您可以执行以下操作: var myCommand = new SqlCommand(SpMainInsert, myConnection) { CommandType = System.Data.CommandType.StoredProcedure }; 模块定义 这是在VB

我正在将VB.net库转换为C#,并且很难找到与VB.net公共模块等效的C#

在同一个VB类中,有一个With块。你知道这一点的等价物是什么吗

短暂性脑缺血发作
Steve Campos

没有与等效的

根据版本,您可以执行以下操作:

var myCommand = new SqlCommand(SpMainInsert, myConnection) {
    CommandType = System.Data.CommandType.StoredProcedure
};
模块定义
这是在VB.NET项目中创建
模块
(模块模板项)时基于默认声明的正确定义。私有构造函数是声明的一部分,不管它是否是必需的。此C#“模块定义”取自多年前的Microsoft资源。我现在没有参考源代码,但稍后将尝试发布

internal { sealed | static } class Module1 {
    #if sealed
        private Module1() { }
    #endif
    public static void Method1() { }
    public static string Method2() { return "here"; }
} 
调用模块方法
不幸的是,C#中没有与VB.Net模块等效的模块。最接近的是静态类。两者都定义了一个对象,该对象不能具有实例成员,但具有不同的语义。最大的是VB.Net,如果模块在范围内,则可以无条件访问其成员

Module Example 
  Public Function Sum(x as Integer, y As Integer) As Integer
    return x + y
  End Function
End Module

Class C1
  Sub Method1() 
    Dim x = Sum(13,42)
  End Sub 
Class
C#没有此功能,需要静态类成员的合格访问权限

还有几个较小的区别

  • 模块成员是隐式共享的,而静态类成员需要显式静态限定符
  • 生成的类型结构中的一些小细节

您是否尝试过?也不需要使用static“密封”,而且“内部”是否正确取决于原始模块的声明方式。这是在VB.NET项目中创建
模块时基于默认声明的正确定义。私有构造函数是声明的一部分。这个C#“模块定义”是多年前从Microsoft souces获得的。我现在没有引用,但稍后将尝试发布。@AMissico,静态类是隐式密封的。添加sealed关键字是编译时错误。正如添加私有构造函数一样。@JaredPar:这只是一种语法,用于向用户显示C#中模块的外观以及如何进行函数调用。“最大的是VB.Net,如果模块在范围内,则其成员可以无条件地访问”-这是由于VB.Net处理名称空间的方式,与“模块”无关它们只是“全局”命名空间中的一个类。(这在技术上并不准确,但评论空间不大。有关更多信息,请查看MSDN。)@AMissico,它与模块有关。它们是唯一一个将成员引入其包含的命名空间而无需限定的构造。VB.NET进行此介绍,而不是模块。该模块只是“.class public auto ansi sealed.”。检查生成的IL。VB.NET编译器将模块转换为类。模块没有什么特别之处。是VB.NET编译器使它变得特别。@AMissico,我不知道你现在在争论什么。我的观点是,VB.Net模块在VB.Net中的语义差异比C#中的静态类要大。确实要编译成类似的结构(不完全相同,检查属性),但这不会改变我的语句的正确性。
Module Example 
  Public Function Sum(x as Integer, y As Integer) As Integer
    return x + y
  End Function
End Module

Class C1
  Sub Method1() 
    Dim x = Sum(13,42)
  End Sub 
Class