Parâmetros de função somente leitura (tipo “const”) de C #

Vindo de um background em C ++, estou acostumado a manter oconst palavra-chave nas definições de função para fazer com que os objetos sejam passados em valores somente leitura. No entanto, descobri que isso não é possível em C # (por favor, corrija-me se estiver errado). Depois de pesquisar no Google, cheguei à conclusão de que a única maneira de criar um objeto somente leitura é escrever uma interface que possua apenas propriedades 'get' e passá-la. Elegante, devo dizer.

public interface IFoo
{
  IMyValInterface MyVal{ get; }
}

public class Foo : IFoo
{
  private ConcreteMyVal _myVal;

  public IMyValInterface MyVal
  {
    get { return _myVal; }
  }
}

Eu passaria para:

public void SomeFunction(IFoo fooVar)
{
  // Cannot modify fooVar, Excellent!!
}

Isto é bom. No entanto, no restante do meu código, eu gostaria de modificar meu objeto normalmente. Adicionar uma propriedade 'set' à interface quebraria minha restrição somente leitura. Eu posso adicionar uma propriedade 'set' paraFoo (e nãoIFoo), mas a assinatura espera uma interface e não um objeto concreto. Eu teria que fazer algum casting.

// 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();

Existe uma maneira mais elegante de replicarconst ou criar parâmetros de função somente leitura sem adicionar outra propriedade ou função?

questionAnswers(3)

yourAnswerToTheQuestion