Home > Code Analysis > CodeRush code issues for overridden members

CodeRush code issues for overridden members

August 19th, 2011

Overridden members (that include an ‘override‘ keyword) provide a new implementation of a virtual or an abstract member with the same signature. Compile-time errors occur when member override rules are violated. To declare an overridden member according to the language specification without violating its rules, CodeRush suggests several overridden-specific code issues.

Here they are:

Override member cannot be marked as new

Cause:

An overridden member cannot be also marked as ‘new‘. Members marked with a ‘new‘ keyword, explicitly hide a member inherited from a base class. This is incorrect, because overridden members provide their own implementation of a member inherited from a base class and replace the base-class version. An error is shown for members marked as an ‘override‘ and ‘new‘ at the same time.

Sample:

CodeRush Code Issues - Override member cannot be marked as new

How to fix:

  • Remove the ‘new’ keyword, if appropriate:

CodeRush Override Member Cannot Be Marked As New Fix 1

  • Remove the ‘override’ keyword, if appropriate:

CodeRush Override Member Cannot Be Marked As New Fix 2

Override member cannot be marked as virtual

Cause:

An overridden member cannot also be marked as ‘virtual‘, because you can override the member marked as ‘override‘ in derived classes the same way as virtual members. So, the ‘virtual‘ modifier is redundant in this case. You will see an error for the overridden virtual member.

Sample:

CodeRush Code Issues - Override member cannot be marked as virtual

How to fix:

  • Do not mark the overridden member as virtual:

CodeRush Override Member Cannot Be Marked As Virtual Fix

Override member cannot change access rights

Cause:

The visibility of overridden members must match inherited visibility of the base member that is being overridden. In other words, an overridden member cannot change the accessibility of the base member. However, if the overridden base member is ‘protected internal’ and it is declared in a different assembly than the assembly containing the override member, then the override method’s declared accessibility must be protected. An error is shown when different visibility modifiers are set for an overridden member and its base member.

Sample:

CodeRush Code Issues - Override member cannot change access rights

How to fix:

  • Do not change the access rights of the overridden member:

CodeRush Override Member Cannot Change Access Rights

Cannot override an inherited sealed member

Cause:

The sealed member cannot be overridden according to the language specification.

Sample:

CodeRush Code Issues - Cannot override inherited sealed member

How to fix:

  • Mark the member as ‘new’ instead of ‘override’:

CodeRush Cannot Override An Inherited Sealed Member Fix

Member cannot be sealed because it is not an override

Cause:

The ‘sealed’ keyword is only permitted on overridden members. An error us shown for members marked as ‘sealed‘ but not overridden.

Sample:

CodeRush Member Cannot Be Sealed Because It Is Not An Override Sample

How to fix:

  • Mark the sealed member as ‘override’ as well:

CodeRush Member Cannot Be Sealed Because It Is Not An Override Fix 1

  • Mark the member as ‘new’ instead of ‘sealed’:

CodeRush Member Cannot Be Sealed Because It Is Not An Override Fix 2

—–
Products: CodeRush Pro
Versions: 12.1 and up
VS IDEs: any
Updated: Nov/19/2012
ID: C124

Similar Posts: