Параметры функции C#, доступные только для чтения («константные»)C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Параметры функции C#, доступные только для чтения («константные»)

Сообщение Anonymous »

Имея опыт работы с C++, я привык вставлять ключевое слово const в определения функций, чтобы объекты передавались в значениях, доступных только для чтения. Однако я обнаружил, что в C# это невозможно (поправьте меня, если я ошибаюсь). После некоторого поиска в Google я пришел к выводу, что единственный способ создать объект, доступный только для чтения, — это написать интерфейс, который имеет только свойства «get», и передать его вместо этого. Элегантно, надо сказать.

Код: Выделить всё

public interface IFoo
{
IMyValInterface MyVal{ get; }
}

public class Foo : IFoo
{
private ConcreteMyVal _myVal;

public IMyValInterface MyVal
{
get { return _myVal; }
}
}
Я бы передал это:

Код: Выделить всё

public void SomeFunction(IFoo fooVar)
{
// Cannot modify fooVar, Excellent!!
}
Это нормально. Однако в остальной части моего кода я хотел бы изменить свой объект обычным образом. Добавление свойства set в интерфейс нарушит мое ограничение только для чтения. Я могу добавить свойство set в Foo (а не IFoo), но подпись предполагает интерфейс, а не конкретный объект. Мне придется пройти кастинг.

Код: Выделить всё

// Add this to class Foo. Might assign null if cast fails??
set { _myVal = value as ConcreteMyVal; }

// Somewhere else in the code...
IFoo myFoo = new Foo;
(myFoo as Foo).MyFoo = new ConcreteMyVal();
Есть ли более элегантный способ репликации const или создания параметров функции, доступных только для чтения, без добавления другого свойства или функции?

Подробнее здесь: https://stackoverflow.com/questions/382 ... of-c-sharp
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»