繁体   English   中英

C#命名空间:调用方法和类

[英]C# Namespaces: Calling Methods and Classes

我一直在使用命名空间来改善程序的结构。 我遇到了一种情况,我想使用一个公共静态方法,该方法返回一个值而又不调用其封闭类。 一种执行此方法的方法是使用out参数。 因此,假设我有以下代码:

namespace Namespace1
{
     namespace Namespace2
     {
          public class ClassName
          {
               public ClassName(Data data, out int AnInt)
               {
                     AnInt = (int)data;
               }
          }
     }
}

我可以这样使用:

Int AnInt;
Namespace1.Namespace2.ClassName(data, out AnInt);

但是,假设我要摆脱out参数。 有没有办法做到这一点而无需暴露层次结构的另一个级别,添加using指令或添加Func <>委托? 说:

Int AnInt = Namespace1.Namespace2.ClassName(data);

代码中的一个问题是您有一个与类同名的“方法”。 这是为类的构造函数保留的,该构造函数没有“返回”值,因此必须使用out参数来提供输出(创建的实例除外)。 尽管构造函数可能具有out参数,但这是非常奇怪的事情,几乎可以肯定可以以更标准的方式完成。

您当然可以创建一个返回值的静态方法:

  public class ClassName
  {
       public static int CalcSomeInt(Data data)
       {
             return (int)data;
       }
  }

然后称其为ike:

int i = ClassName.CalcSomeInt(data);

或者,如果您确实要使用全限定名:

int i = Namespace1.Namespace2.ClassName.CalcSomeInt(data);

如果要问是否可以在引用类的情况下调用静态方法,则答案为否。但是在C#6中,您可以使用“静态别名”,该引用使您可以在不指定类的情况下引用静态成员:

using static Namespace1.Namespace2.ClassName.

...

int i;
i = CalcSomeInt(data);

但是请注意, 编译器会隐式地将类名添加到方法调用中,并且如果其他可访问方法存在歧义,则必须指定类名来解决歧义。

您可能会执行以下操作:

namespace Namespace1 {
    namespace Namespace2 {
        public class ClassName {
            public string SomeMethod(int data, out int AnInt) {
                AnInt = data;
                return "hello world";
            }
            public string SomeMethod(int data) {
                int dummy;
                return SomeMethod(data, out dummy);
            }
        }
    }
}

您的通话可能如下所示:

string s1 = new Namespace1.Namespace2.ClassName().SomeMethod(3);
int x;
string s2 = new Namespace1.Namespace2.ClassName().SomeMethod(3, out x);

在这两种情况下,字符串均具有值“ hello world”。 第二次通话后,您的“ x”设置为“ 3”。

但是-老实说-整个概念闻起来有点...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM