Ecco la mia situazione. In Java posso marcare un metodo come finale nella classe base/super e non c'è modo in cui una classe derivata possa mascherare un metodo della stessa firma. In C#, tuttavia, la nuova parola chiave consente a qualcuno che eredita la mia classe di creare un metodo con la stessa firma.C# impedisce che il metodo della classe base venga nascosto dal nuovo modificatore nella classe derivata
Vedere il mio esempio qui sotto. Devo mantenere pubblico orignal.MyClass per favore non suggerirlo come risposta. Questa sembra essere una funzionalità persa passando da Java a C#
public class orignal.MyClass{
public void MyMethod()
{
// Do something
}
}
class fake.MyClass: orignal.MyClass {
// How to prevent the following
public new void MyMethod()
{
// Do something different
}
}
MODIFICA: non è un duplicato.
Tutte le risposte sembrano suggerire, non è possibile impedire che un metodo venga nascosto/ombreggiato in una classe derivata. Ciò è diventato evidente durante la migrazione di un vecchio codice Java in C#. Un metodo finale in Java non consente a nessuno di utilizzare la stessa firma del metodo in qualsiasi classe derivata. Mentre è bello nella maggior parte degli scenari che C# consente un metodo della stessa firma nella classe derivata, sarebbe stato grandioso prevenire un tale comportamento se giustificato.
possibile duplicato di [Qual è l'equivalente di Java finale in C#?] (Http://stackoverflow.com/questions/1327544/what-is-the-equivalent-of-javas-final-in-c). .. –
Come accennato da @Reed, 'raramente ha importanza'. Il tuo codice continuerà a chiamare il metodo originale. –
Non un duplicato. Non sto chiedendo un equivalente. Sto suggerendo che non esiste per questo caso d'uso. – JAson