PS:本系列笔记将会记录我此次在北京学习Unity开发的总体过程,方便后期写总结,笔记为日更。
笔记内容均为 自己理解,不保证每个都对。
C#笔记未按照难度排列
Part 1继承的简介与作用:
继承是面向对象程序设计中最重要的概念之一。继承允许我们根据一个类来定义另一个类,这使得创建和维护应用程序变得更容易。同时也有利于重用代码和节省开发时间。
当创建一个类时,程序员不需要完全重新编写新的数据成员和成员函数,只需要设计一个新的类,继承了已有的类的成员即可。这个已有的类被称为的基类(父类),这个新的类被称为派生类(子类)。
继承格式为
class 子类:父类
{
}
一个父类可以有多个子类,一个子类只能有一个父类,但一个子类可以通过接口的方式实现多重继承。
Part 2各种继承:
继承后:子类能够访问父类的protected和public对象
所采用的父类均为:
class Shape
{
protected int Width;
public int Heigth;
static Shape() //静态构造方法
{
Console.WriteLine("Shape父类静态构造方法");
}
public Shape()
{
Console.WriteLine("Shape父类构造方法");
} //实例构造方法
public Shape(int Width, int Heigth)
{
this.Width = Width;
this.Heigth = Heigth;
Console.WriteLine("父类带参构造方法");
} //父类带参构造方法
public void setHeigth(int Heigth) //赋值高度
{
this.Heigth = Heigth;
}
public void setWidth(int Width) //赋值宽度
{
this.Width = Width;
}
}
单个继承及其测试代码:
类:
//派生类
//子类能够访问 父类的 protected 和 public 的变量方法, 不能访问private
class Rectangle : Shape
{
static Rectangle() //静态构造方法
{
Console.WriteLine("Area子类静态构造方法");
}
public Rectangle()
{
Console.WriteLine("Area子类构造方法");
} //实例构造方法
public Rectangle(int Width, int Heigth) : base(Width, Heigth)
{
Console.WriteLine("Rectangle Base 传参成功");
} //BASE传参
public int getArea()
{
return Heigth * Width;
} //访问父类元素 访问public 和 protected 定义的变量
}
测试代码:
Console.WriteLine("单个继承测试:");
Rectangle rectangle = new Rectangle();
rectangle.setHeigth(5);
rectangle.setWidth(6);
Console.WriteLine(rectangle.getArea());
测试结果:
继承时构造方法的调用顺序为:子类静态、父类静态、父类构造、子类构造
继承父类的子类访问父类及其测试代码:
类:
class NewArea : Rectangle
{
static NewArea()
{
Console.WriteLine("NewArea子类静态构造方法");
} //静态构造方法
public NewArea()
{
Console.WriteLine("NewArea子类的构造方法");
} //实例构造方法
public void PrintNumber()
{
Console.WriteLine("Width " + Width + " " + "Heigth " + Heigth);
} //打印数字
}
测试代码:
Console.WriteLine();
Console.WriteLine("继承子类,访问父类测试:");
NewArea newArea = new NewArea();
newArea.setHeigth(12);
newArea.setWidth(12);
Console.WriteLine(newArea.getArea());
newArea.PrintNumber();
测试结果:
一个父类有多个继承子类及其测试代码:
类:
Triangle类和前文的Rectangle类一样继承 父类Shape
class Triangle : Shape
{
static Triangle() //静态构造方法
{
Console.WriteLine("Triangle子类静态构造方法");
}
public Triangle()
{
Console.WriteLine("Triangle子类构造方法");
} //实例构造方法
public int getTriArea()
{
return Heigth * Width * 1 / 2;
} //访问父类元素 访问的是public
}
测试代码:
Console.WriteLine();
Console.WriteLine("多个子类继承父类测试:");
Triangle triangle = new Triangle();
triangle.setHeigth(3);
triangle.setWidth(4);
Console.WriteLine(triangle.getTriArea());
测试结果:
基类初始化及其测试代码:
派生类继承了基类的成员变量和成员方法。因此父类对象应在子类对象创建之前被创建。所以可以在成员初始化列表中进行父类的初始化。
类:
class Rectangle : Shape
{
static Rectangle() //静态构造方法
{
Console.WriteLine("Area子类静态构造方法");
}
public Rectangle()
{
Console.WriteLine("Area子类构造方法");
} //实例构造方法
public Rectangle(int Width, int Heigth) : base(Width, Heigth)
{
Console.WriteLine("Rectangle Base 传参成功");
} //BASE传参
public int getArea()
{
return Heigth * Width;
} //访问父类元素 访问public 和 protected 定义的变量
}
测试代码:
Console.WriteLine();
Console.WriteLine("基类初始化测试:");
Rectangle rec = new Rectangle(6 , 6);
Console.WriteLine(rec.getArea());
测试结果:
多重继承及其测试代码:
多重继承指的是一个类别可以同时从多于一个父类继承行为与特征的功能。与单一继承相对,单一继承指一个类别只可以继承自一个父类。
C# 不支持多重继承。但是,可以使用接口来实现多重继承。
接口:
public interface Circumference //定义一个接口
{
int getCircumference(int width);
}
类:
class Square : Shape, Circumference
{
static Square() //静态构造方法
{
Console.WriteLine("Square子类静态构造方法");
}
public Square()
{
Console.WriteLine("Square子类构造方法");
} //实例构造方法
public Square(int Width, int Heigth) : base(Width, Heigth)
{
Console.WriteLine("Square Base 传参成功");
} //BASE传参
public int getCircumference(int width)
{
return 4 * Width;
} //实现接口
}
测试结果: