user2719435
user2719435

Reputation: 39

C# Base class constructor arguments

I learning C#. I want to see what is the best way to implement inheritance. I have a Employee base class and a PartTime derived class. Employee class only receives First and Last name and has a method to print full name.

I want to know what is the proper way to pass First and last name so that when I just call PartTime class I should be also able to print full name from the calling program. At the moment it is showing blank as full name:

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

Upvotes: 2

Views: 373

Answers (3)

Rush Frisby
Rush Frisby

Reputation: 11454

You want to add a constructor to PartTime that will pass along the first and last name to the base constructor

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

Or you could make first and last name public properties on Employee which would be inherited by PartTime. Then you can initialize them when creating instances of either without having to maintain the PartTime constructor.

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

Upvotes: 0

joelmdev
joelmdev

Reputation: 11773

Try this:

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)
    {

    }
}

Note that your base constructor will run before any code in your derived constructor, should you need further initialization logic in the PartTime class.

Upvotes: 1

JLe
JLe

Reputation: 2904

You can call the base class constructor from you derived class like this:

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

and then create it,

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

Upvotes: 9

Related Questions