属性
概念
就是为了对字段的赋值进行修正。起到保护字段的作用,外界不能轻易的访问到字段。本质就是两个方法(可读、可写)
定义方法
当属性被取值的时候,会调用get块,等到的值是get块中返回的值
当属性被赋值的时候,会调用set块,赋进去的值存在变量value里面
int age;//不安全 int atk; //函数 构造函数 属性 public int Age {//当属性被赋值的时候 调用set块 当属性被取值的时候调用get块 get { //必须要有返回值 Console.WriteLine("这是get块"); return age; } set { //只读 只写 //Console.WriteLine(value); if (value < 0) { value = 0; } if (value > 100) { value = 100; } age = value; Console.WriteLine("这是set块"); }//语句块 }
属性的优劣
优点
劣势
属性的单读单写
我们可以对属性的某一个块指定修饰符,如:在一个公共访问权限下声明一个私有访问的Set块。
单写
public string Sex { set { if (value!="男"&&value!="女") { //不满足 value = "?"; } sex = value; } }
单读
private int distance; private float price; public Ticket(int distance) { this.distance = distance; } public int Distance { get { return distance<0?0:distance; } }
自动属性
静态类
概念
在声明类的同时使用static修饰符进行修饰的类即为静态类
static class Test //static定义的类是静态类 { //int name; //静态方法里不能有非静态变量,方法 public static string name; }
静态类只允许有静态成员(静态方法,静态字段,静态属性)
静态类不能实例化
静态类中的方法是通过类名来调用
总结
1.静态类中不能有普通的属性或方法,只能在类中定义静态的方法或属性
2.普通类中可以有静态属性或静态方法,访问方式同样不需要实例化,直接可以用:类名+"."+属性/方法名的方式访问
class Test { public static string testName; static public void TestStaticFun() { Console.WriteLine("我是非静态类中的静态方法"); } public void TestNotStatic() { Console.WriteLine("我是非静态中的非静态方法方法"); } } class Program { static void Main(string[] args) { //Test test = new Test(); //静态类不能被实例化 Test.testName = "易风"; //非静态类的静态属性 静态类名.属性(方法) Test.TestStaticFun(); //非静态类中的静态方法可以不实例化直接访问 Test.TestNotStatic(); //费静态类中的非静态方法必须实例化才能访问
3.静态方法中只能调用静态属性或者静态方法
4.非静态方法里可以调用静态方法/成员
设计模式
单例模式
用处
确保在整个应用程序中只有一个实例
提供一个全局访问的点来访问这个唯一实例
特点
只有一个实例
必须自行创建这个实例
必须向整个系统提供这个实例
实现方法
继承
什么是继承
继承是面向对象程序设计中最重要的概念之一。继承允许我们根据一个类来定义另一个类,这使得创建和维护应用程序变得更容易。同时也有利于重用代码和节省开发时间。
一个类继承另一个类:
1.被继承的类:基类、父类
2.新的类:派生类、子类
如何继承
class Person { protected string name; public int age; private int atk; } //格式 访问修饰符+class+派生类/子类名:基类/父类名 class Student:Person //继承Person类 { }
继承注意
一个类只能直接继承自一个基类。
派生类保留了基类的所有属性和方法。
如果基类的访问域不允许,派生类无法访问其属性和方法
继承有参构造函数方法
class Person { protected string name; public int age; private int atk; public Person(string name, int age) { } } //格式 访问修饰符+class+派生类/子类名:基类/父类名 class Student:Person //继承Person类 { public Student(string name, int age):base(name,age) //base()把name和age传给父类 { }
字符串格式化
int num = 3; Console.WriteLine(string.format("{0}是int类型",num));