簡體   English   中英

使用為C#中的基類制作的方法在派生對象中填充繼承成員

[英]Populate inherited members in derivated object using method made for base class in C#

大家好,我想實現這樣的目標

class Program
{
    static void Main(string[] args)
    {

        Responsible responsible = new Responsible()
        {
            //I want here to populate with PopulatePerson the base members
            Phone = "93827382",
            Company = "Google"
        };
    }

    public Person PopulatePerson(string pName, string pLastName)
    {
        Person person = new Person();
        person.Name = pName;
        person.LastName = pLastName;
        return person;
    }
}
public class Person
{
    public string Name { get; set; }
    public string LastName { get; set; }
}



public class Responsible : Person
{

    public string Phone { get; set; }
    public string Company { get; set; }
}

對於數據庫查詢和其他東西,情況更加復雜,但是基本上這就是我所需要的

我可以使用一個名為Person in Responsible的成員來做Person = PopulatePerson(“ Dan”,“ Johns”),但是由於繼承了,所以發現它有點多余

那這樣的事呢 我為Person創建了一個通用的(靜態)工廠方法,該方法可在從Person繼承的所有類型中重用。

class Program
{
    static void Main(string[] args)
    {

        //Responsible responsible = new Responsible()
        //{
        //    //I want here to populate with PopulatePerson the base members
        //    Phone = "93827382",
        //    Company = "Google"
        //};

        var responsible = Responsible.Populate("Glenn", "Fake", "93827382", "Google");
        //responsible
    }

    // NO LONGER NEEDED
    // ============================
    //public Person PopulatePerson(string pName, string pLastName)
    //{
    //    Person person = new Person();
    //    person.Name = pName;
    //    person.LastName = pLastName;
    //    return person;
    //}
}
public class Person
{
    public string Name { get; set; }
    public string LastName { get; set; }

    public static TPerson Populate<TPerson>(string name, string lastname) where TPerson : Person, new()
    {
        TPerson person = new TPerson();
        person.Name = name;
        person.LastName = lastname;
        return person;
    }
}



public class Responsible : Person
{
    public static Responsible Populate(string name, string lastname, string phone, string company)
    {
        var p = Responsible.Populate<Responsible>(name, lastname);
        p.Phone = phone;
        p.Company = company;
        return p;
    }

    public string Phone { get; set; }
    public string Company { get; set; }
}

不知道您的實際情況是否合理,但是您可以更改PopulatePerson以接受Person對象作為輸入參數,而不是在內部創建一個新的對象。 然后,您可以將新的責任對象傳遞給它,然后設置電話和公司。

編輯:像這樣

class Program
{
    static void Main(string[] args)
    {

        Responsible responsible = new Responsible();
        PopulatePerson(responsible, "first", "last");
        responsible.Phone = "93827382";
        responsible.Company = "Google";

    }

    public static void PopulatePerson(Person person, string pName, string pLastName)
    {
        person.Name = pName;
        person.LastName = pLastName;
    }
}
public class Person
{
    public string Name { get; set; }
    public string LastName { get; set; }
}



public class Responsible : Person
{

    public string Phone { get; set; }
    public string Company { get; set; }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM