是否可以在 C# 中创建不可复制的类型

Is it possible to make an noncopyable type in C#

是否有可能在 C# 中创建一个不能被复制而只能通过引用传递的 class?

C++ 中的等效项是删除复制构造函数和复制赋值运算符。

这是默认行为。如果你有 class:

class foo {
    public string bar { get; set; }
}

在某个地方你这样做:

foo f1 = new foo();
foo f2 = f1;

f1f2 都将引用同一个实例。例如,如果您设置 f1.bar = "bar",则从 f2.bar 读取的值将是 "bar"

您可以创建一个内部构造函数。这样,构造函数只能从定义它的程序集中调用。

您还可以通过使用 Reflection 和 StackTrace(例如)创建更高级的逻辑,并详细控制允许创建 class 实例的人员和时间。类似的逻辑可以应用于属性,您可以在其中控制允许更改 属性 值的人。

C# 中没有析构函数,只有终结器。然而,GC 足够聪明,可以知道什么时候给定对象不再有引用,然后调用这个终结器。因此,当两个变量引用同一个对象时,只要这两个引用存在,该对象就会存在。如果两者 (!!) 都超出范围,GC 将收集要删除的对象。