限制.NET类型是否只能传递ByVal或ByRef

时间:2010-07-29 13:30:13

标签: c# attributes

如果你在.NET中创建一个类,有没有办法对它进行限制,这样如果它被传递给某个方法(作为输入参数),那么它只能通过引用传递或只传递值?
我想的可能是通过课堂上的属性?

3 个答案:

答案 0 :(得分:1)

我认为答案是否定的,因为ByVal和ByRef是由方法做出的选择,而不是调用者或类型设计者。

然而,听起来你想要的是创建一个你知道不可变的类型?也许你想确定它永远不会被改变?然后你可以做的是以下之一(不完整列表):

创建对象,以便您可以通过使用私有,公共,内部关键字等访问可设置的属性。

创建对象,以便通过构造函数获取内部状态的唯一方法。

实现接口并传递该接口而不是实现它的对象。该接口将被设计为仅读取对象的内部状态。

防止任何人使用密封(C#)或NotInheritable(VB)关键字从对象派生。

答案 1 :(得分:0)

  • 类总是通过引用传递。
  • 结构是“始终”按值传递的。 (但有办法解决这个问题)

答案 2 :(得分:0)

我不确定你想要实现什么,但是你可以使用struct而不是class来表示你没有用户通过引用传递的类型吗? Struct是由CLR定义的ValueType。