不同文件中的C#相同命名空间

时间:2017-06-08 06:21:48

标签: c# namespaces

我试图将实现移动到其他文件并在Form1.cs中得到错误“在临时环境中不存在OpenPort” 有什么建议吗?

Form1.cs

namespace MyApp 
{ 
    void Form1Load(object sender, EventArgs e) 
    { 
        OpenPort(); 
    }
}

Port.cs

namespace MyApp 
{ 
    public static void OpenPort();
}

2 个答案:

答案 0 :(得分:1)

首先,您不能直接在命名空间中声明方法或属性。您必须先声明一个类,然后在其中编写方法。然后,如果您想在不同的文件中“传播”同一个类,则应添加partial关键字。

Form1.cs

namespace MyApp
{
    public partial class MyClass
    {
        public void Form1Load(object sender, EventArgs e)
        {
            OpenPort();
        }
    }
}

Port.cs

namespace MyApp
{
    public partial class MyClass
    {
        public static void OpenPort()
        {
            // your implementation here
        }
    }
}

答案 1 :(得分:1)

将名称空间视为容器。就像任何其他容器一样,你可以把东西放进去。命名空间的一个优点是它们可以将功能组合在一起而无需将所有内容放在同一个文件中 - 特别是在程序变大时使用。命名空间也是一种保持名称分离的方法。想想道路 - 伦敦路和高街都可能有18号,但伦敦路18号和18号高街的区别是不同的。

例如,Public Sub load_consigneecode() Dim con As OleDbConnection = New OleDbConnection(constring) con.Open() Dim sql As String = "select con_code from TblConsignee order by con_code" Dim cmd As New OleDbCommand(sql, con) Dim myreader As OleDbDataReader = cmd.ExecuteReader() 'add this in code cmbCode.Items.Clear(); While myreader.Read() cmbCode.Items.Add(myreader(0).ToString) End While myreader.Close() con.Close() End Sub 包含MyNamespaceMyClass包含MyClass

MyMethod

要使用其他命名空间中的namespace MyNamespace { class MyClass { void MyMethod() {} } } ,您需要为MyMethod添加using语句。

进一步想象MyNamespace包含MyOtherNamespaceMyClass包含MyClass MyMethod还包含MyOtherNamespaceMyClass也包含MyClass

MyMethod

与以前一样,要使用其他命名空间中的namespace MyOtherNamespace { class MyClass { void MyMethod() {} } } ,您需要为MyMethod添加using语句。

如果您想同时使用MyOtherNamespaceMyMethod中的MyNamespace,您必须通过在此类调用中添加命名空间名称来告诉您的程序使用哪个

MyOtherNamespace

如果您在同一命名空间中使用相同的方法获得多个类,则适用相同的规则 - 不同之处在于您不需要包含命名空间

MyNamespace.MyClass.MyMethod();
MyOtherNamespace.MyClass.MyMethod();

在相关说明中,您还可以使用MyFirstClass.MyMethod(); MySecondClass.MyMethod(); 关键字在多个文件之间拆分类。例如,你可以改变这个

partial

进入这个

namespace MyNamespace
{
    class MyClass 
    {
        void MyMethod() {}
        void MyOtherMethod() {}
    }
}

从功能上讲,它们是相同的,在这两种情况下,您都可以调用这样的方法

namespace MyNamespace
{
    partial class MyClass 
    {
        void MyMethod() {}
    }

    partial class MyClass 
    {
        void MyOtherMethod() {}
    }
}