2011-10-30 112 views
-2

工作要继承通用类,使用这个目的,我写的波纹管语法如何继承在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表现出一定的语法来解决这个issue.if有任何疑问PLZ ask.Thanks提前

+1

祖先是正确的拼写 - 您可能要改变你坚持到拼写错误之前像我们用引荐。 – Dan

+0

对不起............ – shamim

+1

我不认为你有正确的泛型概念... – BoltClock

回答

1

看起来你还没有完全包裹你的头部周围泛型类的概念。

什么你上述声明的编译器说的是:当你发现在Program类的代码T(或U),然后用Father(或Mother)替换它。

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

HTH!

+0

托马斯韦勒你是对的,我想继承两个对象上的程序class.I现在C#不支持多类继承,但我需要继承这两个类,从你的帖子我不明白为什么一个类不能继承泛型类。你将plz详细告诉我或为我显示一些语法。谢谢回复。 – shamim

+0

当然,你可以继承一个泛型类,这不是问题。但是你从泛型继承的是纯粹的类型声明,而不是对象。您似乎想到的多重遗传与泛型没有任何关系。你将需要某种对象组合。 C#中的继承不适用于这种事情(感谢上帝!)。看起来你应该围绕一些软件设计原则进行包装...... –

2
  1. 你不应该继承程序类,这是我们说的应用
  2. 的切入点
  3. 只需创建Ansestors<T, U>类的实例,我稍微refcatored祖先类,见下图:
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"; 
} 
+0

非常感谢你 – shamim

+1

不是一个真正的问题,但变量的名称不应该是那些,因为如果他们使用'Ansestors ;' –

+0

@Ash Burlaczenko:好的观察!我认为它们可以被抽象为FirstAncestor和SecondAncestor,但它取决于使用这个cass的上下文,这也是 – sll

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; 
    } 
} 

你把公共属性的祖先类,以及父亲班的任何特定属性。 我不明白你为什么需要泛型。

顺便说一句,这是没有意义的计划类继承祖先...

0

在为我们的程序或项目设计特定模型时,有时多重继承是最好的选择(如果不是唯一的话)。不幸的是,C#不支持多重继承,所以我们必须寻找方法来调整我们的设计以使其可能的实现。但是C#提供了可用于模拟多重继承的资源和技巧,而不需要重新设计我们的类模型,只需添加几个辅助方法和类,并在编码时采取一两个预防措施。

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