【问题标题】:Inheriting and Extending Parent Nested Class Inside Child Nested Class c#在子嵌套类c#中继承和扩展父嵌套类
【发布时间】:2020-05-15 12:24:11
【问题描述】:

您好,我一直在努力解决如何从父类的嵌套类继承和扩展子类的嵌套类中的属性。下面的例子:

public class AttributeViewModel{
   //Common Properties...

   public AttributeViewModelSettings Settings {get; set;}

   public class AttributeViewModelSettings {
     //Common Settings
   } 
}

public class ListAttributeViewModel : AttributeViewModel {
   //List specific properties...

   public ListAttributeViewModelSettings Settings { get; set; }

   public class ListAttributeViewModelSettings : AttributeViewModelSettings {
     //Settings Specific to Child Class
   }
}

我们这样做是因为我们还不确定用户可以选择的每个可能的属性需要哪些设置。这样做可以让我们轻松更改这些设置,但我就是想不出正确的方法来处理这样的事情。

【问题讨论】:

    标签: c# inheritance inner-classes


    【解决方案1】:

    如果我正确理解了您的问题,您可以尝试使用泛型:

    public abstract class AttributeViewModelBase
    {
        public abstract AttributeViewModelSettings BaseSettings{ get; }
        public class AttributeViewModelSettings
        {
            //Common Settings
        }
    
    }
    // Define other methods, classes and namespaces here
    public class AttributeViewModel<T>: AttributeViewModelBase 
        where T: AttributeViewModelBase.AttributeViewModelSettings
    {
        //Common Properties...
        public override AttributeViewModelSettings BaseSettings => Settings;
        public T Settings { get; set; }
    
    }
    
    public class ListAttributeViewModel : AttributeViewModel<ListAttributeViewModel.ListAttributeViewModelSettings>
    {
        //List specific properties...
    
        public ListAttributeViewModelSettings Settings { get; set; }
    
        public class ListAttributeViewModelSettings : AttributeViewModelSettings
        {
            //Settings Specific to Child Class
        }
    }
    

    【讨论】:

    • 我基本上只是在手机上输入了这个确切的答案,没想到有人打败了我。虽然我没有抽象属性 T Settings 应该足够了
    • @pinkfloydx33 认为在某些边缘情况下会很方便,所以决定添加它=)
    猜你喜欢
    • 2013-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-24
    • 2011-06-19
    • 1970-01-01
    相关资源
    最近更新 更多