Skip to main content
added 34 characters in body
Source Link
Eldar S
  • 591
  • 3
  • 18

If you're fine with making Base a generic class, this is how:

abstract class Base<T> { public abstract void Method(T args); } class Derived : Base<int> { public override void Method(int args) {} } class AnotherBaseClass<T, E> where E : Base<T> { E e; T t; public void Func() { e.Method(t); } } 

If you need Base to not be generic, you can add this:

abstract class Base { public void Method<T>(T args) { var genericSelf = this as Base<T>; genericSelf.Method(args); } } 

and make Base<T> inherit Base and ensure your concrete classes always derive Base<T> and never Base directly.

If you're fine with making Base a generic class, this is how:

abstract class Base<T> { public abstract void Method(T args); } class Derived : Base<int> { public override void Method(int args) {} } class AnotherBaseClass<T, E> where E : Base<T> { E e; T t; public void Func() { e.Method(t); } } 

If you need Base to not be generic, you can add this:

abstract class Base { public void Method<T>(T args) { var genericSelf = this as Base<T>; genericSelf.Method(args); } } 

and ensure your concrete classes always derive Base<T> and never Base directly.

If you're fine with making Base a generic class, this is how:

abstract class Base<T> { public abstract void Method(T args); } class Derived : Base<int> { public override void Method(int args) {} } class AnotherBaseClass<T, E> where E : Base<T> { E e; T t; public void Func() { e.Method(t); } } 

If you need Base to not be generic, you can add this:

abstract class Base { public void Method<T>(T args) { var genericSelf = this as Base<T>; genericSelf.Method(args); } } 

and make Base<T> inherit Base and ensure your concrete classes always derive Base<T> and never Base directly.

Source Link
Eldar S
  • 591
  • 3
  • 18

If you're fine with making Base a generic class, this is how:

abstract class Base<T> { public abstract void Method(T args); } class Derived : Base<int> { public override void Method(int args) {} } class AnotherBaseClass<T, E> where E : Base<T> { E e; T t; public void Func() { e.Method(t); } } 

If you need Base to not be generic, you can add this:

abstract class Base { public void Method<T>(T args) { var genericSelf = this as Base<T>; genericSelf.Method(args); } } 

and ensure your concrete classes always derive Base<T> and never Base directly.