我曾经能够这样做:
public class Something
{
public class SomethingElse
{
public static class ThisThing
{
public static string aoidj {get;set;}
}
}
}
但它不再有效。
我想要的结果(以及我一直以来能做到的)是:
Something.SomethingElse somethingElse = new Something.SomethingElse();
somethingElse.ThisThing.aoidj = "yay";
Console.WriteLine(somethingElse.ThisThing.aoidj);
但那不再适用。它现在出现在ThisThing
中,而不是somethingElse
SomethingElse.
,而不是{{1}}。
C#语言有变化吗?这种行为肯定是不同的,我不知道它什么时候改变了。
答案 0 :(得分:3)
你需要这样做:
Something.SomethingElse.ThisThing.aoidj = "yay";
Console.WriteLine(Something.SomethingElse.ThisThing.aoidj);
或以其他方式将您的代码更改为:
public class Something
{
public class SomethingElse
{
public Whatever ThisThing = new Whatever();
public class Whatever
{
public string aoidj {get;set;}
}
}
}
然后你可以这样做(你的期望的结果):
Something.SomethingElse somethingElse = new Something.SomethingElse();
somethingElse.ThisThing.aoidj = "yay";
Console.WriteLine(somethingElse.ThisThing.aoidj);
答案 1 :(得分:3)
它必须出现在SomethingElse.
中,否则,您如何访问它,它是Nested Type
!
C#没有以这种方式改变。嵌套类型始终可以通过其父类型访问。
请在此处查看我的回答:Cannot access nested classes or members of base class。
此外,将静态类作为Nested Type
没有意义,因为静态类更常用作管理器或提供者,因此它们主要用于系统的其他地方。
除此之外,如果您想访问静态类成员,则必须输入其名称并一劳永逸地访问它。
Something.SomethingElse.ThisThing.aoidj
但我做不到。这会很糟糕。我需要从somethingElse做到这一点。 Not SomethingElse。
比把它变成属性而不是类。
public class Something {
public class SomethingElse {
public OrEventSomethingElse ThisThing { get; set; }
}
}
public class OrEventSomethingElse {
public string aoidj { get; set; }
}
这样,您将无法通过Nested Type SomethingElse访问它,而只能通过实例访问它。
一些帮助您了解OOP的资源。
**我需要它成为一个班级,因为在ThisThing中有更多的东西**
将其设为SomethingElse
之外的类,以便您可以将其作为简单的实例成员/属性进行访问。
public class ThisThing {
public string Stuff { get; set; }
public int SomeMoreStuff { get; set; }
public DateTime EvenMoreStuff { get; set; }
// ...
public string ThisClassIsGettingHuge {
get {
return "Time to refactor because big classes tend to break SRP";
}
}
}
public class Something {
public class SomethingElse {
public ThisThing ThisThingAsAProperty { get; set; }
}
}
然后,只有这样你才能访问你的实例。
var somethingElse = new Something.SomethingElse;
Console.WriteLine(somethingElse.ThisThingAsAProperty.ThisClassIsGettingHuge);
我已经开发了多年的信息和流程,我很少使用嵌套类型。它们通常会造成比他们帮助更多的伤害。
答案 2 :(得分:0)
没有任何改变,但你的代码是错误的。幸运的是我也找到了答案。
class Something
{
public class SomethingElse
{
public SomethingElse()
{
}
public static class sm
{
public static void set()
{
}
}
}
}
以这种方式使用该课程 -
Something.SomethingElse.sm.set();