How does method inheritance work in c#: virtual override
This article will address the following
Overloading virtual and overriding hiding return types
The plot seems thicker than what the subject seem to indicate
satya - Wednesday, April 11, 2007 10:27:12 PM
there are three key words that controls this
new virtual override
satya - Wednesday, April 11, 2007 10:28:56 PM
java equivalence
use virtual on the base method and override on the derived
satya - Wednesday, April 11, 2007 10:29:18 PM
use abstract modifier if the method carries no body
use abstract modifier if the method carries no body
satya - Wednesday, April 11, 2007 10:30:39 PM
changing a base signature will result in incorrect java behavior
changing a base signature will result in incorrect java behavior
satya - Wednesday, April 11, 2007 10:32:16 PM
Indicate "virtual" explicitly in c#
Indicate "virtual" explicitly in c#
satya - Wednesday, April 11, 2007 10:33:03 PM
overloading is when a method has multiple signatures in the same class
overloading is when a method has multiple signatures in the same class
satya - Wednesday, April 11, 2007 10:46:31 PM
for override to work the methods should have the same signature
for override to work the methods should have the same signature
satya - Wednesday, April 11, 2007 10:46:56 PM
that may not be the case for hiding
that may not be the case for hiding
satya - Wednesday, April 11, 2007 10:49:12 PM
methods are overridden on a signature by signature basis
methods are overridden on a signature by signature basis
satya - Wednesday, April 11, 2007 10:50:14 PM
Here is a good document on java to cover these topics
satya - Wednesday, April 11, 2007 10:51:09 PM
an interesting note on overloading and overriding
If, for example, a class declares two public methods with the same name, and a subclass overrides one of them, the subclass still inherits the other method. In this respect, the Java programming language differs from C++.
satya - Wednesday, April 11, 2007 10:52:50 PM
overloading, overriding, and hiding in java
class Point {
int x = 0, y = 0;
void move(int dx, int dy) { x += dx; y += dy; }
int color;
}
class RealPoint extends Point {
float x = 0.0f, y = 0.0f;
void move(int dx, int dy) { move((float)dx, (float)dy); }
void move(float dx, float dy) { x += dx; y += dy; }
}
satya - Wednesday, April 11, 2007 10:54:44 PM
a return type doesnt seem to be part of a method signature
a return type doesnt seem to be part of a method signature
satya - Wednesday, April 11, 2007 10:55:20 PM
it is a compile time error to override a method that differs only in its return type
it is a compile time error to override a method that differs only in its return type
satya - Friday, April 13, 2007 11:11:51 AM
signature does not include a return type
signature does not include a return type
satya - Friday, April 13, 2007 11:12:54 AM
You can not have two methods that differ only in their return types
You can not have two methods that differ only in their return types
satya - Friday, April 13, 2007 11:16:07 AM
method hiding in c#
A method introduced in a class or struct hides all non-method base class members with the same name, and all base class methods with the same signature (method name and parameter count, modifiers, and types)
satya - Friday, April 13, 2007 12:58:16 PM
different return types
You can not have two methods with different return types even the return types substitutable
satya - Friday, April 13, 2007 1:07:52 PM
In c# you can have different return types for the same method if they are derived
In c# you can have different return types for the same method if they are derived
satya - Friday, April 13, 2007 1:11:36 PM
example 1
public class TestBase
{
public void f1(String a) { Console.WriteLine("tbf1"); }
public object f2(String a)
{
Console.WriteLine("tbf2");
return null;
}
public String f2(String a)// error: different return types
{
Console.WriteLine("tbf2s");
return null;
}
}
public class TestDerived : TestBase
{
new public void f1(String a)
{
Console.WriteLine("tdf1");
}
public String f2(String a)
{
Console.WriteLine("tdf2");
return null;
}
}
satya - Friday, April 13, 2007 1:42:02 PM
another example
public class TestBase
{
//parameter overloading in same class
public void f_overloading() { Console.WriteLine("tbf1"); }
public void f_overloading(String a) { Console.WriteLine("tbf1"); }
public String f_overloading(int i) { return ""; } //ok: different signature
//public String f_overloading(); //error: different return types with same params
// '-' character is not allowed
//different return type allowed in a derived class
//it will be considered a new hidden method
public object f_differentReturntype(String a)
{
return null;
}
//overload across derived
public void f_overloading_derived()
{
}
//virtual method
public virtual void f_virtual() { }
//error: different return types even of the same base type
public virtual object f_virtual_different_returntypes() { return null; }
}
public class TestDerived : TestBase
{
//different return type allowed in a base class
//warning: use new to fix it for hiding
public String f_differentReturntype(String a)
{
return null;
}
//overload across derived
//ok
//same name different signatures
public void f_overloading_derived(String a){}
//virtual method
public override void f_virtual() { }
//error: different return types even of the same base type
public override String f_virtual_different_returntypes() { return null; }
}
satya - Friday, April 13, 2007 2:15:32 PM
Another note on return types for overloaded methods