如何确保动态继承中的类型

How to ensure type in dynamic inheritance

我有以下代码:

public abstract class A //(a)
    {
            public dynamic Id { get; set; }

    }

  public class B: A
    {
       ...     
    }


    public class C:A
    {
         ...   
    }

我怎样才能使 B.Id 是一个 int 而 C.Id 总是一个字符串?

public abstract class A<T> //(a)
{
        public T Id { get; set; }

}

public class B: A<int>
{
   ...     
}


public class C:A<String>
{
     ...   
}