2013-06-24 13 views
9

Oto moja klasa i nie chcę, aby ta metoda była nadpisywana w klasach potomnych, w jaki sposób mogę to zachowanie wykonać?Zakaz zastępowania metody w klasie pochodnej

class A 
{ 
    public virtual void demo() 
    { 
    } 
} 

class B : A 
{ 
    public override void demo() 
    { 
    } 
} 

// when Class B be inherited in C, methods can be overridden further, 
// but I don't want the method to be overridden further. 
class C : B 
{ 

} 
+1

Czy chcesz, aby ten sposób szczelną [] (http://msdn.microsoft.com/en-us/library/88c54tsw.aspx)? –

Odpowiedz

9

put 'sealed' modyfikator przed override void demo()

class A 
{ 
    public virtual void demo() 
    { 
    } 
} 

class B:A 
{ 
    public sealed override void demo() 
    { 
    } 
} 

//B can be inherited in C but demo() method can not be overriden further 
class C:B 
{ 

} 
11

Trzeba tylko sealed modyfikator: (. I przypuszczać, że to zwykle nazwa zgodna z konwencjami .NET, oczywiście)

public sealed override void demo() 
{ 
    // Whatever implementation 
} 

Jeśli chcesz, aby zapobiec metoda nie może zostać zastąpiona bez zmiany samego zachowania, musisz ją przesłonić, ale jednoznacznie wywołać poprzednie zachowanie:

public sealed override void demo() 
{ 
    base.demo(); 
} 

Należy pamiętać, że po zastosowaniu do metody (lub właściwości), sealed można tylko być stosowane w połączeniu z override.

Powiązane problemy