使用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显示了解决这个问题的一些语法。如果有任何查询请问。请提前谢谢
答案 0 :(得分:2)
Ansestors<T, U>
类的实例,我稍微重新启动了Ancestor类,见下文: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#确实提供了可用于模拟多重继承的资源和技巧,而无需从根本上重新设计我们的类模型,只需添加几个辅助方法和类,并在编码时采取一两个预防措施。