Properties can indeed be declared abstract
or virtual
on a base class and overridden by a derived class. But when using inheritance, you cannot change the input parameters or return type of the function/property.
If you find that you want a totally different type for the same property between the derived and the base, you may have a design smell. Perhaps inheritance isn't what you actually want.
If you still think you need something like this, you might be able to leverage generics:
class Base<T>
{
public virtual T MyProp { /* ... */ }
}
// Derived class that uses string for prop
class Derived1 : Base<string>
{
public override string MyProp { /* ... */ }
}
// Derived class that uses int for prop
class Derived2 : Base<int>
{
public override int MyProp { /* ... */ }
}