using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Base_Keyword_in_Csharp
{
class Person {
protected string FirstName { get; set; }
protected string LastName { get; set; }
public Person() //without public we can't inherit Person.
{
this.FirstName = "Default First Name";
this.LastName = "Default Last Name";
}
public Person(string firstname, string lastname) //if we make private Person(string,string) inaccessible due to protraction level
{
this.FirstName = firstname;
this.LastName = lastname;
}
public virtual void GetInfo() { //virtual method could not be private
Console.WriteLine("First Name:" + FirstName);
Console.WriteLine("Last Name:" + LastName);
}
}
class Employee : Person //if we don't create least a constructor as public we would not able to inherit them.
{
public string EmpID = "EMP001";
Employee() : base()
{
}
Employee(string fname, string lname):base(fname, lname)
{
}
public override void GetInfo()
{
base.GetInfo(); // to call base class virtual function.
Console.WriteLine("Employee ID:" + EmpID);
}
static void Main(string[] args)
{
Employee emp = new Employee();//works if only 1 constructor in derive class, if 2 we can't use until we define base constructor in derived class.
emp.GetInfo();
Console.WriteLine("___________________________________________");
Employee emp2 = new Employee("raj", "kumar");//works if only 1 constructor in derive class, if 2 we can't use until we define base constructor in derived class.
emp2.GetInfo();
Console.Read();
}
}
}
/*
Output:
First Name:Default First Name
Last Name:Default Last Name
Employee ID:EMP001
___________________________________________
First Name:raj
Last Name:kumar
Employee ID:EMP001
Interesting facts
We can not inherit private class.
In a concrete class we can create a virtual function that may be later override in derive or not.
We must have a public constructor in base class so child would derived from them.
If we don't declare constructor in base .net automatically defined a public constructor.
After overriding virtual function we may call base method or not. we can call like:- base.GetInfo();
We can access all constructor of base by defining in child using base keyword.
Overall:
The base keyword is used to access members of the base class from within a derived class:
1.Call a method on the base class that has been overridden by another method.
2.Specify which base-class constructor should be called when creating instances of the derived class.
Reference: https://msdn.microsoft.com/en-us/library/hfw7t1ce.aspx
*/
