2

在 C# 中是否有可能创建一个无法复制但只能通过引用传递的类?

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

4

3 回答 3

6

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

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

在某处你这样做:

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

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

于 2016-01-27T13:39:59.773 回答
1

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

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

于 2016-01-27T13:40:18.307 回答
1

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

于 2016-01-27T13:50:11.863 回答