面向对象编程
访问修饰符
public 无限制
private 类内部访问
protected 类和它的派生类可以访问
internal 位于同一个程序集内可以访问
对象构造器
对象构造器又叫实例构造器或构造方法,对象构造器用来初始化对象的状态,如果类没有定义构造器,则编译器会自动生成一个无参的对象构造器,如果类已经定义了类型的对象构造器,则边一起不会自动为类生成一个无参的对象构造器。
类的对象构造器中可以使用this关键字调用本类中定义的其他对象构造器。
例如:
class Car { public string carName; public string carColor; public Car(string carname) { this.carName = carname; } public Car(string carname,string carcolor):this(carname) { this.carColor = carcolor; } }
Car(string,string)对象构造器使用this关键字调用Car(string)构造器,在调用Car(string,string)对象构造器时,会先调用Car(string)构造器初始化对象状态,然后才会调用Car(String,string)
对象的状态和行为:字段方法和属性
方法重载:
public void Run() { Console.WriteLine("汽车跑起来!"); } public void Run(int i) { Console.WriteLine("{0}辆汽车跑起来",i); } public void Run(string name) { Console.WriteLine("{0}汽车跑起来!",name); }
属性封装字段
C#中的属性提供了对字段的封装,属性内部包含一个get访问器和一个set访问器。如果属性中只有get访问器,那么这个属性是只读的,如果属性中只有set访问器,那么字段是只写的,如果属性中既有set访问器又有get访问器,那么这个属性是可以可读可写的。set访问器中的Value是个关键字,代表当前要赋的值。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
class Program { static void Main(string[] args) { Student student = new Student(); student.Age = 24; student.Name = "霸气"; Console.WriteLine("学生的年龄是:{0},学生的姓名是:{1}",student.Age,student.Name); student.Age = -1; student.Name = string.Empty; Console.WriteLine("学生的年龄是:{0},学生的姓名是:{1}",student.Age,student.Name); Console.ReadLine(); } } class Student { private string name; private int age; public string Name { get { return name; } set { name = value.Length > 0 ? value : name; } } public int Age { get { return age; } set { age = value > 0 ? value : age; } } }
索引器
class Test
{
private string[] Test=new string[5];
public string this[int i]
{
get{return Test[i]};
set{Test[i]=value};
}
}
用的时候this是类名 例如Test test=new Test(); test[0]
属性是对字段的修改
继承:代码的重用
类可以从另外一个类继承,这就是说,这个类,拥有它继承的类的所有成员(初构造方法外)。利用类的继承机制,程序开发人员在已有类的基础上构造新类。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
class Program { static void Main(string[] args) { Employee employee = new Employee(); employee.name = "王小二"; employee.timeCard(); Manager manager = new Manager(); manager.name = "王小三"; manager.timeCard(); manager.allot(); Console.ReadLine(); } } class Employee { public string name; public void timeCard() { Console.WriteLine("{0}已经考勤",name); } } class Manager : Employee { public void allot() { Console.WriteLine("{0}正在分配任务",name); } }