在C#中,我可以在子类中隐藏/修改访问器吗?
我甚至不知道这个原则叫什么,也不知道如何寻找它,所以如果以前有人提出过,我真诚地道歉,但最好的方法是举个例子在C#中,我可以在子类中隐藏/修改访问器吗?,c#,inheritance,overriding,accessor,C#,Inheritance,Overriding,Accessor,我甚至不知道这个原则叫什么,也不知道如何寻找它,所以如果以前有人提出过,我真诚地道歉,但最好的方法是举个例子 class Properties { public string Name { get; set; } } class MyClass { class SubProperties: Properties { public override Name { get { return GetActualName();
class Properties
{
public string Name { get; set; }
}
class MyClass
{
class SubProperties: Properties
{
public override Name
{
get { return GetActualName(); }
set { SetActualName(value); }
}
}
public SubProperties ClassProperties;
private string GetActualName()
{
return SomeFunction();
}
private void SetActualName(string s)
{
ClassProperties.Name = SomeOtherFunction(s);
}
}
其思想是让任何实例化了
MyClass
的对象都有一个完全可访问的属性ClassProperties
。对于该对象来说,它看起来就像一个属性对象,但在幕后,MyClass实际上是在计算和修改字段的结果。这种声明方法显然是错误的,因为我无法从子属性定义中访问GetActualName()
和SetActualName()
。我怎样才能实现这样的目标?你在寻找这样的目标吗
public virtual string Name { get; set; }
abstract class Properties
{
public abstract string Name { get; set; }
}
class MyClass
{
private class SubProperties : Properties
{
private MyClass myClass;
public SubProperties(MyClass myClass)
{
this.myClass = myClass;
}
public override Name
{
get { return this.myClass.GetActualName(); }
set { this.myClass.SetActualName(value); }
}
}
private string name;
public MyClass
{
this.MyClassProperties = new SubProperties(this);
}
public Properties MyClassProperties { get; private set; }
private string GetActualName()
{
return this.name;
}
private void SetActualName(string s)
{
this.name = s;
}
}
如果要从子属性访问MyClass方法,需要将对MyClass实例的引用传递给Subperties实例。这看起来像是我想要的,我来试试。唯一真正的区别是,在我的例子中,MyClass中没有私有变量“name”-它实际上是对套接字的读/写,但我想对调用对象完全隐藏它。谢谢