什么是 class?

What is a class?

我可以想象当你看到我的问题标题时的第一反应:“你在这里享有如此高的声誉,怎么会忽视class是什么?”

我的观点如下:直到现在我一直使用 C++,Delphi,Java,...这很简单:class 是一种类型object 的定义。您需要在内存中保留一些 space 才能开始使用它(因此构造函数),然后不要忘记释放该内存(如果您的编程语言不支持垃圾 collection)。

不过今天遇到了一个关于C#中类型定义和常量的问题,就落在了this URL,提到了这样一段源码:

class Calendar1
{
  public const int Months = 12;
}

要使用它,您只需要做:

using Calendar1;

并且您可以使用 Months 作为常量。

但这是我的问题:构造函数在哪里?如果这个 class 是 object 的类型定义,我们在谈论哪个 object?

所以,如果我理解正确的话,C# 是基于“一切都是 class”的思想,但为了实现这一点,C# 的发明者扩展了 [=33= 的定义],所以现在我们得到(C# 定义):

A class is one of the following:

  • a type definition for an object. In that case, a constructor is needed for creating the object.
  • ...

谁能完成定义?

这是 C# 中很常见的做法。 类 通常用于创建“麻袋”以保存常量,或者通常用作实体或 dto 对象。这些通常是在没有用户定义的构造函数的情况下进行的。如果 class 没有构造函数,则在编译时定义一个相当于空构造函数:

public Calendar1()
{
}

这个答案更详细: C# class without constructor

你不需要这个usingusing 是使命名空间可用。

  • 常量是静态的。这意味着它不是实例成员,而是类型的成员。因此,您可以通过类型名称访问它:Calendar1.Months 或使用 using static Calendar1; 仅使用 Months.
  • 在 C# 中,class 隐式创建一个无参数 public 构造函数,如果您没有显式声明的话。

当您创建 class 的实例时,您正在分配内存(使用关键字 new) 常量不是在运行时创建的,它们是在编译时创建的并存储在程序集元数据中。因此,当您访问常量时,您将不会访问 class 的实例 - 您将直接从元数据访问常量。 看看这个 post: How are C# const members allocated in memory?