Вы также можете объявить MyType как вложенный класс MyBase (вместо наследования), таким образом, вы можете получить доступ к закрытым / защищенным членам, когда отправляете класс MyBase в качестве параметра
public class MyBase
{
protected object PropertyOfBase { get; set; }
public class MyType
{
public void MyMethod(MyBase parameter)
{
object p = parameter.PropertyOfBase;
}
}
}
Для создания экземпляра MyType просто используйте
var t = new MyBase.MyType();
t.MyMethod(new MyBase());