C# 命名空间通信

C# Namespace communication

提问人:Nick 提问时间:12/3/2019 更新时间:12/3/2019 访问量:409

问:

请问(作为新手)如何从另一个命名空间调用方法?如果可能的话,感谢您设置一个示例。.

例如:(1) 如何设置 MY_PRIMARY 类的属性以使用它们,以及 (2) 如何在 MY_SECONDARY 命名空间中调用 AddNumbers 方法?谢谢。。

    using.. etc

    namespace MY_PRIMARY
    {
        public partial class SomethingHere
        {
            public Boolean holiday { get; set; } = false;
            public int age { get; set; } = 18;
            //etc... 
        }

        class Program
        {
            private static void Main()
            {
            // some code here.. and..

            public int AddNumbers(int number1, int number2)
            {
                int result = number1 + number2;
                return result;
            }
        }
    };

    namespace MY_SECONDARY
    {
        public partial class SomethingElseHere
        {
            public Boolean holiday { get; set; } = false;
            public int age { get; set; } = 18;
            //etc... 
        }

        class Program
        {
            static void Main()
            {
            // some code here..
            }
            // and..

            Program outer = new Program();
            outer.AddNumbers(3, 18);       // <--- this is failing..
        }
    }

;
C# 方法 命名空间

评论

0赞 crashmstr 12/3/2019
Program outer = new Program();莫。MY_SECONDARY.ProgramMY_PRIMARY.Program
0赞 juharr 12/3/2019
问题是你有两个类,只有一个类有方法。你想要拥有那个有方法的人。但是,您添加的任何内容都不会出现在该对象中。ProgramAddNumbersvar outer = new MY_PRIMARY.Program();MY_SECONDARY.Program
0赞 crashmstr 12/3/2019
这些在同一个文件中吗?如果是这样,我认为这将导致运行控制台应用程序时出现问题。如果它们在单独的控制台项目中,那么这也将是一个问题。

答:

1赞 Glenn van Acker 12/3/2019 #1

命名空间旨在按语义对对象进行分组。我有点困惑为什么你有 2 个程序类。拥有一个类库和一个程序会更有意义。无论如何。。。 假设您在命名空间 Program.First 中有一个 Object1, 和 Program.Second 中的 object2 Object2 有一个名为 someMethod 的方法。 调用此方法的方法是 a) 要么在你的头等舱上添加“使用 Program.Second”。 b) 创建一个 Program.Second.Object2 的实例,并调用该方法。

https://www.programiz.com/csharp-programming/namespaces

因此,假设您想让 Program() 的对象执行以下操作:

using System;

namespace MY_PRIMARY
{
    public partial class SomethingHere
    {
        public Boolean holiday { get; set; } = false;
        public int age { get; set; } = 18;
        //etc... 
    }

    public class Program
    {
        public int AddNumbers(int number1, int number2)
        {
            int result = number1 + number2;
            return result;
        }
    }
} 

namespace MY_SECONDARY
{
    public partial class SomethingElseHere
    {
        public Boolean holiday { get; set; } = false;
        public int age { get; set; } = 18;
        //etc... 
    }

    class Program
    {
        static void Main()
        {    
            MY_PRIMARY.Program outer = new MY_PRIMARY.Program();
            outer.AddNumbers(3, 18);   
        }
    }
}

(编辑)更新了我的答案,我复制了您的代码,看到您的命名空间没有关闭,因此,您在那里嵌套了命名空间和类。另外,有些代码直接在你的类中,而不是在函数中。

另外,不要定义 2 个 Main() 方法,这是应用程序的入口点。

评论

0赞 Nick 12/3/2019
非常感谢。事实上,老实说,我已经尝试过了,但我按照您的建议再次尝试。我一定做错了什么(两个命名空间在同一个文件中,以回答评论)。我收到的错误:“名称'外部。AddNumbers'在当前上下文中不存在“,我不明白为什么......
0赞 Glenn van Acker 12/3/2019
公开程序类
0赞 Luaan 12/3/2019
然后,@Nick发布实际的最小代码来重现您的问题。Glenn 所做的更改应该足以修复您到目前为止发布的示例代码。
0赞 Nick 12/3/2019
这就是我所拥有的: namespace MY_PRIMARY { public class Program { private static void Main() { } public int AddNumbers(int number1, int number2) { int result = number1 + number2; 返回结果;namespace MY_SECONDARY { public class Program { static void Main() { } MY_PRIMARY.程序外部 = 新MY_PRIMARY。程序();外。添加数字(3, 18);} };
0赞 Glenn van Acker 12/3/2019
这到底是什么错误?您的代码是在单独的文件中还是全部在一个文件中?您还应该为不同的类使用不同的名称。
1赞 FabioIn 12/3/2019 #2

...对函数和类的 POSITIONS 进行了一些修改......请看:

using Alias = MY_PRIMARY.Program;

namespace MY_PRIMARY
{
    public partial class SomethingHere
    {
        public Boolean holiday { get; set; } = false;
        public int age { get; set; } = 18;
        //etc... 
    }

    public class Program
    {
        private static void Main()
        {
            // some code here.. and..
        }

        public int AddNumbers(int number1, int number2)
        {
            int result = number1 + number2;
            return result;
        }
    };

    namespace MY_SECONDARY
    {
        public partial class SomethingElseHere
        {
            public Boolean holiday { get; set; } = false;
            public int age { get; set; } = 18;
            //etc... 
        }

        class Program
        {
            static void Main()
            {
                // some code here..
                // and..
                Alias outer = new Alias();
                outer.AddNumbers(3, 18);       // <--- OKAY...
            }
        }
    }
}

查看更多:使用命名空间(C# 编程指南)

评论

0赞 Nick 12/3/2019
@Fabioln : 谢谢先生,它奏效了!现在,我确实理解这里的语法,但是,不应该允许使用MY_PRIMARY。程序不使用 Alias ?
0赞 FabioIn 12/3/2019
@Nick,我认为只有将“别名”更改为“MY_PRIMARY”。程序“......或者将名称“别名”更改为其他名称...示例:“My_Program”......