C#命名空间:调用方法和类
本文关键字:方法 调用 命名空间 | 更新日期: 2023-09-27 18:20:41
我一直在摆弄命名空间来改进程序的结构。我遇到过一个案例,我想使用一个公共静态方法,该方法返回一个值,而不调用其封闭类。其中一种方法是使用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);
代码中的一个问题是您有一个与类同名的"方法"。这是为类的构造函数保留的,该构造函数没有"return"值,因此必须使用out
参数来提供输出(创建的实例除外)。虽然构造函数有out
参数是可能的,但这非常奇怪,几乎可以肯定地以更标准的方式完成。
您当然可以创建一个返回值的静态方法:
public class ClassName
{
public static int CalcSomeInt(Data data)
{
return (int)data;
}
}
然后称之为:
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);
在这两种情况下,字符串都包含值"helloworld"。第二次通话后,您的"x"设置为"3"。
但是,老实说,整个概念闻起来有点。。。