第12天C#基础静态、属性和设计模式 属性 静态类 设计模式 继承 字符串格式化

概念

就是为了对字段的赋值进行修正。起到保护字段的作用,外界不能轻易的访问到字段。本质就是两个方法(可读、可写)

定义方法

第12天C#基础静态、属性和设计模式
属性
静态类
设计模式
继承
字符串格式化

当属性被取值的时候,会调用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块");
            }//语句块
        }

属性的优劣

优点

第12天C#基础静态、属性和设计模式
属性
静态类
设计模式
继承
字符串格式化

劣势

第12天C#基础静态、属性和设计模式
属性
静态类
设计模式
继承
字符串格式化

第12天C#基础静态、属性和设计模式
属性
静态类
设计模式
继承
字符串格式化

属性的单读单写

我们可以对属性的某一个块指定修饰符,如:在一个公共访问权限下声明一个私有访问的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;
            }

           
        }

自动属性

第12天C#基础静态、属性和设计模式
属性
静态类
设计模式
继承
字符串格式化

静态类

概念

在声明类的同时使用static修饰符进行修饰的类即为静态类

    static class Test   //static定义的类是静态类
    {
        //int name;  //静态方法里不能有非静态变量,方法
        public static string name;
    }

静态类只允许有静态成员(静态方法,静态字段,静态属性)

静态类不能实例化

静态类中的方法是通过类名来调用

第12天C#基础静态、属性和设计模式
属性
静态类
设计模式
继承
字符串格式化

第12天C#基础静态、属性和设计模式
属性
静态类
设计模式
继承
字符串格式化

第12天C#基础静态、属性和设计模式
属性
静态类
设计模式
继承
字符串格式化

 总结

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.静态方法中只能调用静态属性或者静态方法

第12天C#基础静态、属性和设计模式
属性
静态类
设计模式
继承
字符串格式化

4.非静态方法里可以调用静态方法/成员

第12天C#基础静态、属性和设计模式
属性
静态类
设计模式
继承
字符串格式化

设计模式

第12天C#基础静态、属性和设计模式
属性
静态类
设计模式
继承
字符串格式化

单例模式

用处

确保在整个应用程序中只有一个实例

提供一个全局访问的点来访问这个唯一实例

特点

只有一个实例

必须自行创建这个实例

必须向整个系统提供这个实例

实现方法

第12天C#基础静态、属性和设计模式
属性
静态类
设计模式
继承
字符串格式化

继承

什么是继承

继承是面向对象程序设计中最重要的概念之一。继承允许我们根据一个类来定义另一个类,这使得创建和维护应用程序变得更容易。同时也有利于重用代码和节省开发时间。

一个类继承另一个类:

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