C#继承隐藏继承的成员

Har*_*rry 2 .net c# oop class object

我看了其他线程像这样,但他们并没有为我工作.

我有两节课:

public class ClassA 
{
    public string _shouldBeInteger;
    public string _shouldBeBool;
    public string _shouldBeDateTime;
}

public class ClassB : ClassA
{
   public int? shouldBeInteger
    {
        get { return (_shouldBeInteger != null) ? Convert.ToInt32(Convert.ToDouble(_shouldBeInteger)) : new int?(); }
        set { _shouldBeInteger = Convert.ToString(value); }
    } 

  //... same thing with datetime etc.


}
Run Code Online (Sandbox Code Playgroud)

如果我现在创建一个ClassB的新对象,我得到

 _shouldBeInteger, _shouldBeBool, _shouldBeDateTime;
 shouldBeInteger,shouldBeBool,shouldBeDateTime
Run Code Online (Sandbox Code Playgroud)

但我想隐藏_variables给用户.在ClassB中将它们设置为私有将覆盖它们,但我需要访问它们才能解析字符串值.

更新

有一个ClassC填充ClassAs的值,这主要是它们必须可写的原因.我没有办法改变它的工作方式,但我完全控制了ClassA和ClassB

ClassC //not changeAble for me
{
 //infomagic filling values of ClassA    
}
Run Code Online (Sandbox Code Playgroud)

将ClassA变量设置为private将不起作用,因为ClassA的程序员以一种奇怪的方式生成它.

因为ClassA需要是可写的,但是对于继承的其他类不可读,我终于得到了这个:

ClassA 
{ 
  public string _shouldBeInteger { protected get; set; } 
  //and so on
} 
Run Code Online (Sandbox Code Playgroud)

这会导致ClassB与theese属性一起使用,而不会将它们放在外面.Intellisense仍会显示它们,但您可以考虑使用:

 [EditorBrowsable(EditorBrowsableState.Never)]
Run Code Online (Sandbox Code Playgroud)

解决这个问题.

谢谢大家.

Mar*_*rco 9

我认为您可以使用以下方法解决问题:

public class ClassA 
{
    protected string _shouldBeInteger;
    protected string _shouldBeBool;
    protected string _shouldBeDateTime;
}
Run Code Online (Sandbox Code Playgroud)

所以这些变量可以被派生类访问,但不能访问用户.

用户更新后编辑:
我不知道这对您来说是否可能是一个vali解决方案,但请尝试:

public class ClassB : ClassA
{
    public new int? _shouldBeInteger
    {
        get { return (base._shouldBeInteger != null) ?
                     Convert.ToInt32(Convert.ToDouble(base._shouldBeInteger)) : 
                     new int?(); }
        set { base._shouldBeInteger = Convert.ToString(value); }
    }
}
Run Code Online (Sandbox Code Playgroud)