Si la clase del objeto que está pasando fue escrito por usted, entonces estás de suerte.
Pregúntese: si C# tenía una característica const
, ¿qué operaciones en el objeto esperaría que se prohibiera a través de una referencia const
a mi clase?
Defina entonces un interface
que omita las operaciones prohibidas.
Por ejemplo:
class MyClass
{
public string GetSomething() { ... }
public void Clobber() { ... }
public int Thing { get { ... } set { ... } }
}
La interfaz correspondiente "const" podría ser:
interface IConstMyClass
{
public string GetSomething() { ... }
public int Thing { get { ... } }
}
Ahora modifique el tipo:
class MyClass : IConstMyClass
{
Ahora puede utilizar IConstMyClass
en el sentido de const MyClass
.
void MyMethod(int x, int y, IConstMyClass obj)
Nota: habrá quienes le digan que esto no es suficiente. ¿Qué pasa si MyMethod
regresa al MyClass
? Pero ignóralos. En última instancia, el implementador puede usar la reflexión para evitar cualquier aspecto del sistema tipo - see this amusing example.
La única opción para detener los ataques de reflexión es el enfoque trivial: hacer un clon totalmente desconectado.
posible duplicado de [Por qué los parámetros de const no están permitidos en C#] (http: // stackoverflow.com/questions/3263001/why-const-parameters-are-not-allowed-in-c) – Incognito
Esa pregunta pregunta por qué los parámetros de const no están permitidos. Mi pregunta es si un parámetro de solo lectura es posible en C#. No lo considero un duplicado. – CJ7