Hi All,
I have these two class
class Base {
public int number = 1;
public override String ToString(){
return number.ToString();
}
}
class Derived : Base {
public new int number = 2;
}
static void Main(){
Base base = new Base();
Derived derived = new Derived();
Console.WriteLine(base.ToString());
Consolt.WriteLine(derived.ToString());
}
I was expecting to print out:
1
2
but I am getting:
1
1
Is there a work around to achieve what I was intended to do
Thank you,
Riady

Virtual Variable
Malleswar
public class Base {
private int mNumber = 1;
public virtual int number {
get { return mNumber; }
}
public override string ToString() {
return number.ToString();
}
}
public class Derived : Base {
private int mNumber = 2;
public override int number {
get { return mNumber; }
}
}
Note that this code works too:
Base b = new Base();
Console.WriteLine(b.ToString());
b = new Derived();
Console.WriteLine(b.ToString());
Jonathan Hart
Code sample:
class Base
{
public int number;
public Base()
{
number = 1;
}
public override String ToString()
{
return number.ToString();
}
}
class Derived : Base
{
public Derived()
{
number = 2;
}
}
class Program
{
static void Main(string[] args)
{
Base baseInstance = new Base();
Derived derivedInstance = new Derived();
Console.WriteLine(baseInstance.ToString());
Console.WriteLine(derivedInstance.ToString());
}
}
Output:
1
2
Tim Greenwood
Hi,
fields cannot behave like virtual functions. To get what you want you will need a virtual function GetNumber which you override in Derived. ToString must then use GetNumber and not the field number.
--
SvenC