CodeRush code issues for overridden members
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:
How to fix:
- Remove the ‘new’ keyword, if appropriate:
- Remove the ‘override’ keyword, if appropriate:
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:
How to fix:
- Do not mark the overridden member as virtual:
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:
How to fix:
- Do not change the access rights of the overridden member:
Cannot override an inherited sealed member
Cause:
The sealed member cannot be overridden according to the language specification.
Sample:
How to fix:
- Mark the member as ‘new’ instead of ‘override’:
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:
How to fix:
- Mark the sealed member as ‘override’ as well:
- Mark the member as ‘new’ instead of ‘sealed’: