簡體   English   中英

C#基類構造函數參數

[英]C# Base class constructor arguments

我學習C#。 我想看看實現繼承的最佳方法是什么。 我有一個Employee基類和一個PartTime派生類。 Employee類只接收名字和姓氏,並有一個打印全名的方法。

我想知道傳遞名字和姓氏的正確方法是什么,這樣當我只調用PartTime類時,我也應該能夠從調用程序中打印全名。 目前它顯示為空白全名:

class Program
{
    static void Main(string[] args)
    {
        Employee emp = new Employee("John", "Doe");
        // emp.PrintFullName();

        PartTime pt = new PartTime();

        float pay=pt.CalcPay(10, 8);
        pt.PrintFullName();  

        Console.WriteLine("Pay {0}", pay);
        Console.ReadKey();
    }
}

public class Employee
{
    string _firstName;
    string _last_name;

    public Employee(string FName, string LName)
    {
        _firstName = FName;
        _last_name = LName;
    }

    public Employee() { } 

    public void PrintFullName()
    {
        Console.WriteLine("Full Name {0} {1} ", _firstName, _last_name);
    }
}

public class PartTime : Employee
{
    public float CalcPay(int hours, int rate)
    {
        return hours * rate;
    }
}

您可以從派生類中調用基類構造函數,如下所示:

public class PartTime : Employee
{
    public PartTime(string FName, string Lname)
         : base(FName, LName)
    { }
}

然后創建它,

PartTime pt = new PartTime("Part", "Time");

嘗試這個:

public class Employee
{
    public string FirstName { get; set; }
    public string LastName { get; set; }

    public Employee(string firstName, string lastName)
    {
        FirstName = firstName;
        LastName = lastName;
    }

    //method implementations removed for clarity

}

public class PartTime:Employee
{
    public PartTime(string firstName, string lastName)
        : base(firstName, lastName)
    {

    }
}

請注意,如果在PartTime類中需要進一步的初始化邏輯,那么基本構造函數將在派生構造函數中的任何代碼之前運行。

您想要向PartTime添加一個構造函數,該構造函數將第一個和最后一個名稱傳遞給基礎構造函數

public PartTime(string fName, string lName) : base(fName, lName) {
}

或者,您可以在Employee上創建名字公共屬性,這些屬性將由PartTime繼承。 然后,您可以在創建任一實例時初始化它們,而無需維護PartTime構造函數。

class Program
{
    static void Main(string[] args)
    {
        Employee emp = new Employee { FirstName = "John", LastName = "Doe" };
        emp.PrintFullName();

        PartTime pt = new PartTime  { FirstName = "Jane", LastName = "Doe" };

        float pay=pt.CalcPay(10, 8);
        pt.PrintFullName();  

        Console.WriteLine("Pay {0}", pay);
        Console.ReadKey();
    }
}

public class Employee
{
    public string FirstName { get; set; }
    public string LastName { get; set; }

    public void PrintFullName()
    {
        Console.WriteLine("Full Name {0} {1} ", FirstName, LastName);
    }
}

public class PartTime : Employee
{
    public float CalcPay(int hours, int rate)
    {
        return hours * rate;
    }
}

暫無
暫無

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

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