【问题标题】:C# Namespace communicationC# 命名空间通信
【发布时间】:2019-12-03 13:49:17
【问题描述】:

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

例如:(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..
        }
    }

;

【问题讨论】:

  • Program outer = new Program();MY_SECONDARY.Program,而不是 MY_PRIMARY.Program
  • 问题是你有两个Program 类,只有一个有AddNumbers 方法。您需要var outer = new MY_PRIMARY.Program(); 才能拥有具有该方法的那个。但是,您添加到 MY_SECONDARY.Program 的任何内容都不会出现在该对象中。
  • 这些是否在同一个文件中?如果是这样,我认为这会导致运行控制台应用程序出现问题。如果它们在单独的控制台项目中,那也是个问题。

标签: c# methods namespaces


【解决方案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() 方法,这是应用程序的入口点。

【讨论】:

  • 非常感谢。事实上,老实说,我已经尝试过,但我按照您的建议再次尝试了。我一定做错了什么(两个命名空间在同一个文件中,以回答评论)。我得到的错误:“名称'outer.AddNumbers'在当前上下文中不存在”,我不知道为什么......
  • 公开程序类
  • @Nick 发布实际的最小代码来重现您的问题,然后。 Glenn 所做的更改应该足以修复您迄今为止发布的示例代码。
  • 这就是我所拥有的: 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.Program external = new MY_PRIMARY.Program(); external.AddNumbers(3, 18); } };
  • 这到底是什么错误?您的代码是在单独的文件中还是全部在一个文件中?您还应该为不同的类使用不同的名称。
【解决方案2】:

...对函数和类的位置稍作修改...请参阅:

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...
            }
        }
    }
}

查看更多: Using namespaces (C# Programming Guide)

【讨论】:

  • @Fabioln:谢谢先生,它成功了!现在,我确实理解这里的语法,但是,不应该允许使用 MY_PRIMARY.Program 放置 using Alias 吗?
  • @Nick,我认为只更改每个“MY_PRIMARY.Program”的“Alias”......或者将名称“Alias”更改为其他名称......例如:“My_Program”......跨度>
猜你喜欢
  • 2021-03-05
  • 1970-01-01
  • 2018-07-31
  • 2010-12-23
  • 1970-01-01
  • 2013-07-22
  • 2021-11-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多