在 C# 中是否有可能创建一个无法复制但只能通过引用传递的类?
C++ 中的等价物是删除复制构造函数和复制赋值运算符。
这是默认行为。如果你有课:
class foo {
public string bar { get; set; }
}
在某处你这样做:
foo f1 = new foo();
foo f2 = f1;
两者都f1
将f2
引用相同的实例。例如,如果您设置f1.bar = "bar"
,则从中读取的值f2.bar
将是"bar"
。
您可以创建一个内部构造函数。这样,构造函数只能从定义它的程序集中调用。
您还可以通过使用 Reflection 和 StackTrace(例如)创建更高级的逻辑,并详细控制允许谁创建类的实例以及何时创建。类似的逻辑可以应用于属性,您可以在其中控制允许谁更改属性值。
C# 中没有析构函数,只有终结器。然而,GC 足够聪明,可以知道给定对象何时不再存在引用,然后调用此终结器。因此,当两个变量引用同一个对象时,只要这两个引用存在,这个对象就会存在。如果两个 (!!) 都超出范围,则 GC 收集对象以进行删除。