在C ++中,我可以在一段代码中声明一个功能齐全的匿名类,如果我只需要它一次,我就不必声明它。
代码应该是这样的
Class MyClass
{
Class
{
String string1;
String string2;
void MyMethod();
} Strings;
}
并将其称为MyClass.Strings.string1
,MyClass.Strings.MyMethod()
等成员。通过这种方式,我可以优雅地对代码进行分组。
有没有办法在C#中做同样的事情?
答案 0 :(得分:4)
这样我就可以优雅地对我的代码进行分组。
我不知道如何帮助您优雅地对代码进行分组,但C#中没有这样的东西。有匿名类,但它们只在本地范围内工作:
// inside a method:
var obj = new { String1 = "Hello", String2 = "World" };
你无法为他们添加方法。
你最接近的是内部类/结构:
class MyClass
{
class MyStrings
{
String string1;
String string2;
void MyMethod() { ... }
}
MyStrings Strings;
}
答案 1 :(得分:1)
我同意扫地车。此功能只会添加混乱的代码。您应该考虑使代码尽可能简单易懂。这意味着如果你想要对你的代码进行分组,让每个组都拥有自己的功能,为什么不把这个组织变成一个类,并给它一个直接反映它的用途的名称。
你可以做的是使用一个匿名类,它在C#中不会实现任何接口,只是派生自object
:
var a = new { MyMember = 1, MyFunc = new Func<int>(() => 1) };
现在您可以调用此类型的两个成员:
Console.WriteLine(a.MyMember);
var retVal = a.myFunc();
但这是否会让您的代码更容易理解它的作用?我对此表示怀疑。给你的实例 - 甚至一次使用 - 一个描述他们的意图 - 背后的想法 - 的名称。不要让其他人通过加密来理解你的代码。
除此之外,你可以 - 正如其他人所说的那样 - 实现,没有其他人使用你的类只是让它在另一个类中私有 - 也就是将你的类嵌套到另一个类中:
public class MyClass
{
private class Strings { /* ... */ }
}
现在,您的类只能在MyClass
内(以及当然嵌套在MyClass
中的其他类中)可见。这使得无法从外部访问该类,如下所示:
var strings = new MyClass.Strings();
答案 2 :(得分:0)
尝试使内部类静态。这样您就可以使用您描述的语法:
class MyClass {
public static Strings {
public static string string1;
public static string string2;
public static void MyMethod() {}
}
}
然后,您可以致电:MyClass.Strings.string1 = "Hell, world!";