Se la classe dell'oggetto che si sta passando è stato scritto da voi, allora siete fortunati.
Chiediti: se C# aveva una funzionalità const
, quali operazioni sull'oggetto dovrei essere bannato tramite un riferimento const
alla mia classe?
Quindi definire un interface
che non consente le operazioni vietate.
Ad esempio:
class MyClass
{
public string GetSomething() { ... }
public void Clobber() { ... }
public int Thing { get { ... } set { ... } }
}
L'interfaccia corrispondente "const" potrebbe essere:
interface IConstMyClass
{
public string GetSomething() { ... }
public int Thing { get { ... } }
}
Ora modificare la classe:
class MyClass : IConstMyClass
{
Ora è possibile utilizzare IConstMyClass
a significare const MyClass
.
void MyMethod(int x, int y, IConstMyClass obj)
Nota: ci saranno quelli che ti diranno che questo non è abbastanza. Cosa succede se MyMethod
torna a MyClass
? Ma ignorali. In definitiva, l'implementatore può utilizzare la riflessione per aggirare qualsiasi aspetto del sistema di tipi: see this amusing example.
L'unica opzione per arrestare gli attacchi di riflessione è l'approccio banale: creare un clone totalmente disconnesso.
fonte
2010-08-08 09:28:39
possibile duplicato di [Perché i parametri const non sono consentiti in C#] (http: // stackoverflow.it/questions/3263001/why-const-parameters-is-not-allowed-in-c) – Incognito
Questa domanda chiede perché i parametri const non sono consentiti. La mia domanda chiede se un parametro di sola lettura è possibile in C#. Non lo considero un duplicato. – CJ7