gpt4 book ai didi

c# - 为什么 C# 静态类可以包含非静态类/结构?

转载 作者:太空狗 更新时间:2023-10-30 00:13:47 25 4
gpt4 key购买 nike

我最近开始学习 C#,但对某些事情感到困惑。 documentation for static classes 告诉我它们只能包含静态成员。然而,我可以在我的静态类中定义非静态嵌套类和结构。

我猜测类/结构定义不算作成员,但为什么允许这样呢?如果静态类的嵌套类可以被实例化,那岂不是与静态类的意义相矛盾?我在这里误解了一些明显的东西吗?

最佳答案

在 C# 中,嵌套类不是子类,周围的类更像是另一个命名空间。您无权从内部类中访问外部类的实例(与 fe Java 相反)。这就是静态类可以包含嵌套类型的原因。

一个著名的例子,LINQ class Enumerable这是静态的。它包含许多辅助类:

public static class Enumerable
{
// many static LINQ extension methods...

class WhereEnumerableIterator<TSource> : Iterator<TSource>
{
// ...
}

internal class EmptyEnumerable<TElement>
{
public static readonly TElement[] Instance = new TElement[0];
}

public class Lookup<TKey, TElement> : IEnumerable<IGrouping<TKey, TElement>>, ILookup<TKey, TElement>
{
// ...
}

// many others
}

所以周围的静态类是内部类的逻辑容器。它属于那里,因为它是从静态类中使用的,并且通常无法从其他地方访问(如果不是公共(public)的)。

但您是对的,这是缺少文档。他们应该说:

Contains only static members or nested types

关于c# - 为什么 C# 静态类可以包含非静态类/结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46583168/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com