Ограничение того, может ли тип .NET передаваться только ByVal или ByRef. - PullRequest
2 голосов
/ 29 июля 2010

Если вы создаете класс в .NET, есть ли способ наложить на него ограничение, чтобы, если он был передан в какой-либо метод (в качестве входного параметра), то он мог быть передан только по ссылке или только по значению?
Я думал, может быть, с помощью атрибута в классе?

Ответы [ 3 ]

1 голос
/ 29 июля 2010

Я полагаю, что ответ отрицательный, потому что ByVal и ByRef - это выбор, сделанный методом, а не вызывающей стороной или конструктором типов.

Однако, похоже, вам нужно создать тип, который вы знаетебудет неизменным?Может быть, вы хотите быть уверены, что это никогда не изменится?Тогда вы можете выполнить одно из следующих действий (не полный список):

Создать объект так, чтобы у вас был доступ к настраиваемым свойствам с помощью частных, открытых, внутренних ключевых слов и т. Д.

Создайте объект так, чтобы единственный способ получить его внутреннее состояние - через конструктор.

Реализуйте интерфейс и передавайте этот интерфейс вместо объектов, которые его реализуют.Интерфейс должен быть предназначен для чтения только внутреннего состояния объекта.

Запретить кому-либо выводить данные из объекта с помощью ключевых слов sealed (C #) или NotInheritable (VB).

0 голосов
/ 29 июля 2010

Я не уверен, чего вы пытаетесь достичь, но можете ли вы использовать struct, а не class для типа, который вы не используете для передачи по ссылке?Структура является ValueType, как определено CLR.

0 голосов
/ 29 июля 2010
  • Класс всегда передается по ссылке.
  • Структура "всегда" передается по значению. (но есть способы обойти это)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...