Code
public abstract class ATest
{
public abstract int MyMethod();
}
public class MyTest : ATest
{
public override int MyMethod()
{
return -1;
}
}
Result
public abstract class b { public abstract int a();}
public class c : b { public override int MyMethod() { return -1; } }
Attempt to workaround Code:
public abstract class ATest
{
public virtual int MyMethod() { return -1; }
}
public class MyTest : ATest
{
public override int MyMethod()
{
return -1;
}
}
Result
public abstract class b{public virtual int a(){return-1;}}public class c:b{
public override int MyMethod(){return-1;}}
Another attempt to workaround
public class ATest
{
public virtual int MyMethod() { return -1; }
}
public class MyTest : ATest
{
public override int MyMethod()
{
return -1;
}
}
Result
public class b{public virtual int a(){return-1;}}public class c:b{public
override int MyMethod(){return-1;}}
Yet another attempt
public class ATest
{
public virtual int MyMethod() { return -1; }
}
public class MyTest : ATest
{
public new int MyMethod()
{
return -1;
}
}
Result:
public class b{public virtual int a(){return-1;}}public class c:b{public new int
a(){return-1;}}
Now were getting somewhere.
Because you cant use new keyword when overriding a abstract method, it has to be virtual.
Workaround is:
public abstract class ATest
{
public virtual int MyMethod() { return -1; }
}
public class MyTest : ATest
{
public new int MyMethod()
{
return base.MyMethod();
}
}
Result
public abstract class b { public virtual int a() { return -1; } }
public class c : b
{
public new int a() { return base.a(); }
}
Which pass this test
[TestClass]
public class UnitTest
{
[TestMethod]
public void TestMethod()
{
b t = new c();
Assert.AreEqual(-1, t.a());
}
}
Code
Result
Attempt to workaround Code:
Result
Another attempt to workaround
Result
Yet another attempt
Result:
Now were getting somewhere.
Because you cant use new keyword when overriding a abstract method, it has to be virtual.
Workaround is:
Result
Which pass this test