none
C#在这种需求下怎么设计基类来继承呢 RRS feed

  • 问题

  • public class MyBaseClass<MyData>
    
    {
    
      protected List<MyData> MyDataList;
    
    }

    像这样,其实派生类里面主要就是MyData不一样,但他们共同点都是List,而且MyData里面必定有几个变量或方法a/b

    因为在这个基类里面MyDataList[xxx].a,MyDataList[xxx].b会经常被用到

    但是不同派生类的MyData还会有自己的独有成员

    感觉我目前这个思路是应该行不通的,但这么写出来应该需求就比较清晰了吧…有没有什么能实现的办法

    2018年10月25日 2:17

答案

  • 你的意思是這樣嗎  ?

      class Program
        {
            static void Main(string[] args)
            {
                MyBaseClass<Class1> o1 = new MyBaseClass<Class1>();
                MyBaseClass<Class2> o2 = new MyBaseClass<Class2>();
             }
        }
    
        public interface ICommon
        {
             int X { get; set; }
             string Y { get; set; }
        }
    
        public class MyBaseClass<T> where T : ICommon 
        {
            protected List<T> MyDataList { get; set; }
        }
    
        public class Class1 : ICommon
        {
            public int X { get; set; }
            public string Y { get; set; }
    
            public void Class1Method() { }
        }
    
        public class Class2 : ICommon
        {
            public int X { get; set; }
            public string Y { get; set; }
    
            public void Class2Method() { }
        }


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。 https://skilltree.my/




    2018年10月25日 10:00

全部回复

  • 你的意思是這樣嗎  ?

      class Program
        {
            static void Main(string[] args)
            {
                MyBaseClass<Class1> o1 = new MyBaseClass<Class1>();
                MyBaseClass<Class2> o2 = new MyBaseClass<Class2>();
             }
        }
    
        public interface ICommon
        {
             int X { get; set; }
             string Y { get; set; }
        }
    
        public class MyBaseClass<T> where T : ICommon 
        {
            protected List<T> MyDataList { get; set; }
        }
    
        public class Class1 : ICommon
        {
            public int X { get; set; }
            public string Y { get; set; }
    
            public void Class1Method() { }
        }
    
        public class Class2 : ICommon
        {
            public int X { get; set; }
            public string Y { get; set; }
    
            public void Class2Method() { }
        }


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。 https://skilltree.my/




    2018年10月25日 10:00
  • 十分感谢 原来可以这样约束
    2018年10月25日 14:23