Как наследовать родовой класс - PullRequest
0 голосов
/ 30 октября 2011

Работа на 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"; свойство. Что является проблемой в моем синтаксисе? Пожалуйста, покажите некоторый синтаксис для решения этой проблемы. Если у вас есть какой-либо запрос, пожалуйста, спросите.

Ответы [ 3 ]

2 голосов
/ 30 октября 2011
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, а определенные свойства - в любой класс Mother of Father.Я не понимаю, зачем вам дженерики.

Кстати, класс Program не имеет смысла наследовать Предков ...

2 голосов
/ 30 октября 2011
  1. Вы не должны наследовать класс Program, это, скажем, точка входа приложения
  2. Просто создайте экземпляр класса Ansestors<T, U>, я слегка перекомпилировал класс Ancestor, см. Ниже:1005 *
public interface IAncestor
{
    string Name { get; set; }
}

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.Name = "The father name";
}
1 голос
/ 30 октября 2011

Похоже, вы еще не полностью поняли концепцию универсальных классов.

То, что вы говорите компилятору с приведенным выше объявлением: Всякий раз, когда вы найдете T (или U) в коде класса Program, замените его на Father (или Mother) .

Почему вы ожидаете, что класс Program будет иметь вложенный объект типа Father? Он нигде не объявлен, все, что вы объявили - это директива разрешения типа для компилятора.

НТН!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...