C#基础篇-类

前言: 对于类的理解这个太熟悉不过了,从入门的第一个程序HelloWord,中第一句代码就是[访问权限] Class 类名{…},可以看出类无处不在,如果把项目比作房子,那么类可以说就是这个房子的每一块砖瓦,而程序员就是这个添砖加瓦的人,类是自己定义数据类型的蓝图,规定该类对象执行什么操作,存放什么数据类型,所以它十分重要,犹如你的内裤一般,所以请不要随便偷看别人的类库。
在这里插入图片描述

一:定义

1:语法

          [访问权限]   Class    类名
          {
                 //你的美好蓝图
          }

例:

    public class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("你的美好南图!");
             Console.ReadLine();
        }
    }

运行结果:
在这里插入图片描述
2:访问权限
访问权限
在这里插入图片描述
备注:访问权限就是访问资源时,对访问者划分权限范围(访问该类或该成员变量或该函数),类的默认访问标识符是 internal,成员的默认访问标识符是 private。比如一个访问权限为private的变量,这个变量只有自身类部可以进行访问其他都无访问权限。


二:构造函数

1:无参构造函数
2:有参构造函数
例:

        public class student
        {
           private string name;
           private int age;
           //重写无参构造函数
          public  student()
          {
            Console.WriteLine("你调用了无参构造函数");
          }
          //有参构造函数
        public  student(string name,int age)
        {
            this.name = name;
            this.age = age;
            Console.WriteLine("你调用了有参构造函数");
            Info();
        }
        public void Info()
        {
            Console.WriteLine($"你的名字:{name},你今年:{age}岁了");
        }
    }

      public  class Program
      {
        static  void Main(string[]args)
        {
            //无参构造函数
            student stu = new student();
            //有参构造函数
            student stu2 = new student("张三",20);
            Console.ReadLine();
        }   
      }

运行结果:
在这里插入图片描述
备注:无参构造函数是系统自己生成定义的,用户可以重写,构造函数的作用起到初始化类的作用,从有参构造函数就可以看出,用户在其他类传递的参数,通过this就可以直接赋值给成员变量,从而起到初始化类的作用。


三:析构函数

       ~类名()
        {
            //一些要释放的代码
         }
  class Line
    {
        private double length;   // 线条的长度
        public Line()  // 构造函数
        {
            Console.WriteLine("对象已创建");
        }
        ~Line() //析构函数
        {
            Console.WriteLine("对象已删除");
            Console.ReadLine();
        }

        public void setLength(double len)
        {
            length = len;
        }
        public double getLength()
        {
            return length;
        }

        static void Main(string[] args)
        {
            Line line = new Line();
            // 设置线条长度
            line.setLength(6.0);
            Console.WriteLine("线条的长度: {0}", line.getLength());
           
        }
    }

运行结果:
在这里插入图片描述
备注:析构函数,用来做善后工作,手动释放资源,但是只能在类中使用,系统自己调用,但是不能重写,继承,不能被调用,不能带修饰或参数。


四:封装(成员变量 ,成员函数 ,静态关键字:Static,get和set方法)

1:成员变量
①:字段(成员变量):定义的一条数据属性,数据类型可以是值类型也可以是引用类型。(比如:人的身高,体重,年龄等等都可以说成是字段,包括人这个对象也可以看作是一条字段)
②:语法:

[访问权限] [Static] 数据类型 变量名;
([]表示选填,成员变量默认访问权限为Private)

③:例

  //声明String类型,变量名为briefs,默认值为"内裤"的成员变量
        public string briefs = "内裤";

2成员函数
把一些相关的语句组织在一起,用来执行一个任务的语句块。
语法:

[访问权限][...] [Static] 返回数据类型T 方法名([形参数据类1 形参名1],[形参数据类2 形参名2]..){
              //[]表示选填,成员默认访问权限为Private
    return T;//返回值类型要和返回数据类型一一对应;无返回值类型可无需返回void
}
    public class Program
    {
        public void meath()
        {
            Console.WriteLine("定义一个返回数据类型为无返回值类型,无形式参数的方法");
        }
        public int Add(int a,int b)
        {
            return a + b;
        }
    }


    public class tset
    {
        static void Main(string[] args)
        {
            Program pro = new Program();
            pro.meath();
            Console.WriteLine($"20+20={ pro.Add(20, 20)}");
            Console.ReadLine();
        }
    }

运行结果:
在这里插入图片描述
3:静态关键字:Static
Static静态修饰表示直接访问该变量,该方法,把修饰为Static的变量看作常量来使用,在访问其他类的资源时,无需实例化类。

  public class Program
    {
        //声明String类型,变量名为briefs,默认值为"内裤"的成员变量
        public static string briefs = "内裤";
        //声明一个返回值为String类型,方法名为GetBriefs的方法
        public static String GetBriefs()
        {
            return $"我给儿子买了一条{briefs}";
        }
    }

    public class ProgramSon
    {
        static void Main(string[] args)
        {
           
           //无需实例化直接调用
            Console.WriteLine(Program.briefs);
            Console.WriteLine(Program.GetBriefs());
            Console.ReadLine();

        }
    }

运行结果:
在这里插入图片描述
4:get和set方法
①:添加get和set方法的快捷键
选中属性,按ctrl+r+e点弹出窗体确定就可以
在这里插入图片描述
②:派生属性:(可以在里面设置相应的条件)

         //私有属性
         private string name;
         private int age;
         //公开访问
         public string Name
        {
            get
            {
                return name;
            }

            set
            {
                name = value;
            }
        }

        public int Age
        {
            get
            {
                return age;
            }
            set
            {
                if(age>0&&age<200)
                {
                    age = value;
                }else
                {
                    age = 0;
                    Console.WriteLine("年龄不符合要求");
                }
            }
        }

//只读,只写

          //私有属性
         private string name;
         private int age;
          //公开访问
          //只读,无法修改,只能读取
         public string Name
         {
            get
            {
                return name;
            }
        }
        
        //只写,无法读取,只能修改
        public int Age
        {
            set
            {
                if(age>0&&age<200)
                {
                    age = value;
                }else
                {
                    age = 0;
                    Console.WriteLine("年龄不符合要求");
                }
            }
        }

//只读
在这里插入图片描述
//只写
在这里插入图片描述
③另一种写法不能设置相应的条件(三层架构中常用此属性作实体类)

Public string name { set; get; }
Public int age { set; get; }
//只写
public string name { set; private get; }
//只读
public int age { private set; get; }

备注:封装就是对类进行设计,就访问类型来看,成员变量常为私有属性(默认Private),用户要对成员变量进行访问,常常通过get和set访问器进行访问(私有属性,公开访问),外部初始化本类,通过类的构造函数进行类初始化,类中成员函数表示一系列操作的集合,用来实现具体操作,如果一个成员变量一个成员函数常常被外部使用,就像常量一样的进行访问,常常定义为static。


发布了49 篇原创文章 · 获赞 17 · 访问量 4288

猜你喜欢

转载自blog.csdn.net/weixin_42753193/article/details/105002707