[英]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.