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

时间:2015-11-05 23:38:54

标签: c# .net namespaces

我一直在搞乱命名空间以改善我的程序结构。我遇到了一个案例,我想使用一个公共静态方法,它返回一个值而不调用它的封闭类。一种方法是使用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参数。是否有任何方法可以做到这一点,而不暴露层次结构的另一个级别,添加使用指令,或添加一个Func<>代表?说:

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

2 个答案:

答案 0 :(得分:4)

代码中的一个问题是你有一个"方法"与班级同名。这是为类的构造函数保留的,它没有" return"值,因此必须使用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中你可以有一个"静态别名&# 34;这使您可以在不指定类的情况下引用静态成员:

using static Namespace1.Namespace2.ClassName.

...

int i;
i = CalcSomeInt(data);

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

答案 1 :(得分:1)

您可能会这样做:

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"。

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