في 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 إلى مثيل Subproperties إذا كنت ترغب في الوصول إلى طرق MyClass من Subproperties.
نصائح أخرى
public virtual string Name { get; set; }
لا تنتمي إلى StackOverflow