abstract class Parent
{
protected string attrParent;
public AttrParent { get; protected set }
public Parent(string sParent)
{
The moment you assign Child instance to variable typed as Parent you can only access members declared on Parent.
You'd have to downcast it back to Child to access Child-only members:
Parent p = new Child();
Child c = (Child)p;
c.AttrChild = "hello";
That cast might fail at runtime, because there might be a different class that inherits Parent.