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)
解决这个问题.
谢谢大家.
我认为您可以使用以下方法解决问题:
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)
归档时间: |
|
查看次数: |
2302 次 |
最近记录: |