code_junkie

Can I prevent an inherited virtual method from being overridden in subclasses?

Nov 10th, 2011
109
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.43 KB | None | 0 0
  1. class A
  2. {
  3. public virtual void Render()
  4. {
  5. }
  6. }
  7. class B : A
  8. {
  9. public override void Render()
  10. {
  11. // Prepare the object for rendering
  12. SpecialRender();
  13. // Do some cleanup
  14. }
  15.  
  16. protected virtual void SpecialRender()
  17. {
  18. }
  19. }
  20. class C : B
  21. {
  22. protected override void SpecialRender()
  23. {
  24. // Do some cool stuff
  25. }
  26. }
  27.  
  28. A obj = new C();
  29. obj.Render(); // calls B.Render -> c.SpecialRender
  30.  
  31. public sealed override void Render()
  32. {
  33. // Prepare the object for rendering
  34. SpecialRender();
  35. // Do some cleanup
  36. }
  37.  
  38. class B : A
  39. {
  40. public sealed override void Render()
  41. {
  42. // Prepare the object for rendering
  43. SpecialRender();
  44. // Do some cleanup
  45. }
  46.  
  47. protected virtual void SpecialRender()
  48. {
  49. }
  50. }
  51.  
  52. class A
  53. {
  54. public virtual void Render()
  55. {
  56. }
  57. }
  58. class B : A
  59. {
  60. public override void Render()
  61. {
  62. // Prepare the object for rendering
  63. SpecialRender();
  64. // Do some cleanup
  65. }
  66. protected virtual void SpecialRender()
  67. {
  68. }
  69. }
  70. class B2 : B
  71. {
  72. public new void Render()
  73. {
  74. }
  75. }
  76. class C : B2
  77. {
  78. protected override void SpecialRender()
  79. {
  80. }
  81. //public override void Render() // compiler error
  82. //{
  83. //}
  84. }
  85.  
  86. protected override sealed void Render() { ... }
  87.  
  88. class B : A
  89. {
  90. protected sealed override void SpecialRender()
  91. {
  92. // do stuff
  93. }
  94. }
  95.  
  96. class C : B
  97. protected override void SpecialRender()
  98. {
  99. // not valid
  100. }
  101. }
Add Comment
Please, Sign In to add comment