如何继承泛型类

时间:2011-10-30 16:37:38

标签: c# nested-class generics

使用C#。我想为此目的继承泛型类,我编写了下面的语法

 public class Father
    {
        public string FatherName { get; set; }
    }
    public class Mother
    {
        public string MotherName { get; set; }
    }

    public class Ancestors<T, U> 
    {
        //public class Bar
        //{
        //    private T t;
        //    private U u;
        //}
    }


    class Program : Ancestors<Father, Mother>
    {
        static void Main(string[] args)
        {
            Ansestors.Father.FatherName = "xxx";
        }
    }

我想要Ansestors.Father.FatherName =“xxx”;我的语法有什么问题?Plz显示了解决这个问题的一些语法。如果有任何查询请问。请提前谢谢

4 个答案:

答案 0 :(得分:2)

  1. 你不应该继承Program类,这就是说应用程序的入口点
  2. 只需创建一个Ansestors<T, U>类的实例,我稍微重新启动了Ancestor类,见下文:
  3. public interface IAncestor
    {
        string Name { get; }
    }
    
    public sealed class Father : IAncestor
    public sealed class Mother : IAncestor
    
    public sealed class ParentsAncestor<T, U> 
     where T: IAncestor
     where U: IAncestor
    {
         public ParentsAncestor(T father, U mother)
         {
             this.Father= father;
             this.Mother = mother;
         }
    
         public T Father { get; private set; }
         public U Mother { get; private set; } 
    }
    
    static void Main(string[] args)
    {
         var instance = new ParentsAncestor<Father, Mother>(new Father(), new Mother());
         instance.Father.FatherName = "The father name";
    }
    

答案 1 :(得分:2)

class Program
{
    static void Main(string[] args)
    {
        //original parents
        Father father = new Father("George");
        Mother mother = new Mother("Mary");

        //mothers parents aka grandparents
        mother.Mother = new Mother("Ana");
        mother.Father = new Father("Jack");
    }
}

abstract class Ancestor
{
    public String Name { get; set; }
}

public class Father : Ancestor {
    public Mother Mother { get; set; }
    public Father Father { get; set; }

    public Father(String name)
    {
        base.Name = name;
    }
}
public class Mother : Ancestor {
    public Mother Mother { get; set; }
    public Father Father { get; set; }

    public Mother(String name)
    {
        base.Name = name;
    }
}

您将公共属性放在Ancestor类中,并将父类中的特定属性放入。 我不明白为什么你需要泛型。

顺便说一句,Program类继承Ancestors是没有意义的......

答案 2 :(得分:1)

看起来你还没有完全围绕泛型类的概念。

您使用上述声明对编译器说的是:每当您在Program类的代码中找到T(或U)时,请将其替换为Father(或Mother)。

为什么期望Program类具有Father类型的嵌套对象?它没有在任何地方声明,你声明的只是编译器的类型解析指令。

HTH!

答案 3 :(得分:0)

在为我们的程序或项目设计某个模型时,有些情况下多重继承是最好的(如果不是唯一的)选择。遗憾的是,C#不支持多重继承,因此我们必须寻找适应我们设计的方法,以使其实现成为可能。但是C#确实提供了可用于模拟多重继承的资源和技巧,而无需从根本上重新设计我们的类模型,只需添加几个辅助方法和类,并在编码时采取一两个预防措施。

http://www.codeproject.com/KB/architecture/smip.aspx