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?