C#では、サブクラスのアクセサを非表示/変更できますか?
-
22-09-2019 - |
質問
この原則が何と呼ばれているのか、どのようにそれを検索するのかさえわからないので、以前に育てられたことがあった場合は心から謝罪しますが、それを行う最良の方法は例です。
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()
内部から SubProperties
意味。このようなことをどのように達成しますか?
解決
このようなものをお探しですか?
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インスタンスへの参照をサブプロパティインスタンスに渡す必要があります。
他のヒント
public virtual string Name { get; set; }
所属していません StackOverflow