2023/10/31——C#——面向对象编程、类与对象、只读与可读可写、属性 和字段的关系...

1.面向对象编程 

        简介:程序很好的“模块化设计“,清晰的“分层组合”,方便的“业务扩展”;      

1.对象和类:在C#中,一切都是对象。对象是类的实例。类是一种自定义数据类型,它定义了对象的属性(字段)和行为(方法)。类是面向对象编程的基本构建块。

2.封装:封装是OOP的核心概念之一。它指的是将数据和相关的操作封装在一个类中,以隐藏数据的内部实现细节,提供公共接口供其他部分的代码访问。这有助于维护代码的可维护性和安全性。3.继承:继承允许一个类派生出一个或多个子类,子类可以继承父类的属性和方法,并可以添加自己的属性和方法。继承有助于代码的重用和层次化结构。

4.多态:多态性允许不同的类共享相同的接口或基类,并以不同的方式实现这些接口。这允许程序在运行时选择正确的方法或属性来执行,依赖于实际的对象类型。

5.抽象类和接口:C#支持抽象类和接口,它们都是用于定义规范,但有一些不同。抽象类可以包含部分实现,而接口只定义了方法签名,没有实现。类可以继承一个抽象类,但可以实现多个接口。6.类成员:C#类可以包含字段、属性、方法、构造函数、事件等成员。这些成员定义了类的状态和行为。

7.访问修饰符:C#使用访问修饰符来控制类成员的可见性和访问权限,例如publicprivateprotected等。

8.实例化对象:在C#中,要使用类创建对象,通常使用 new 操作符来实例化对象。                         

2.类与对象     

        是面向对象编程的具体实现方式

  1. 类 (Class):

    • 一个类是一种用户自定义的数据类型,用于定义对象的模板或蓝图。
    • 类定义了对象的属性(字段)和行为(方法)。
    • 通过类,您可以创建多个具有相似特性和行为的对象。
  2. 对象 (Object):

    • 对象是类的实例。它是根据类的定义创建的具体实体。
    • 每个对象都有自己的状态(属性值)和行为(可以执行的方法)。
    • 您可以创建多个对象,每个对象都可以具有不同的属性值。
  3. 类的定义:

    • 类的定义通常包括类名、字段、属性、方法等成员。
    • C#类的定义通常使用关键字class,如:class MyClass { /* 类的成员定义 */ }
    • //1.访问权限  默认访问权限为internal
      //2.static  abstarct ..... 对与类的特殊使用的关键字
      //3.关键字 class
      //4.类名   大驼峰命名
      //5.{}  类的作用域    包含 类的成员 (成员变量 和成员函数)
      //6. 一般类在命名空间中定义   也可以在一个类中定义另一个类
  4. 对象的创建:

    • 对象的创建通常使用new关键字,如:MyClass myObject = new MyClass();
    • 这会调用类的构造函数来初始化对象。
  5. 属性和方法:

    • 类的属性(字段)用于描述对象的状态。它们可以包括各种数据类型,如整数、字符串等。
    • 类的方法用于定义对象的行为。方法可以执行操作并与对象的属性进行交互。

3.成员变量

 //成员变量 (字段)
 //(1)字段是类型的成员,也称为成员变量 在类中字段也可以叫全局变量 在整个类中可以使用
 //(2)字段是定义在类中方法之外的 局部变量是定义在方法内部的
 // (3) 字段的格式: 访问修饰符(默认访问修饰符 private ) 数据类型  字段名
 // (4) 字段是有默认值的  值类型默认值为 0  引用类型默认值为null  局部变量没有默认值
 //(5) 字段的类型为值类型和字符串类型 使用时是深拷贝(会克隆)  其他的引用类型 默认是浅拷贝(不克隆 给原值)
 //(6) 字段的访问修饰符      学过的修饰符字段都能使用
 //(7) 在一个类中 不能重复定义字段  但是允许定义相同名字的字段和局部变量   使用规则:就近原则
 //(8) 字段的命名规则  _+小驼峰  保持和系统框架中的字段名字一致
 //(9) 字段包含 静态字段和非静态字段(实例字段)
 //(10)  const描述的字段 不能使用staitc  原因 const描述的字段 本质就是包含静态的含义
 //(11)  readonly描述的字段  可以使用staitc  可以在定义字段时赋值或者在其构造函数中赋值
 //(12) 一般使用字段时 都使用private的   为了内部的字段不暴漏给其他类
 //但是使用private后 字段的灵活消失  ,使用类的成员-属性     来解决 字段灵活性的问题
 //实例字段 随着new对象的创建而创建
 //静态字段 在类加载的时候创建 且创建一次

 //全局变量  字段
 int b;
 
 string str;
 string str1;
 float f = 1.1f;
 int[] intArray = new int[3] { 1, 2, 3 };
 int[] intArray1 = new int[3];

 private int inta;
 public int intb;
 internal int intc;
 protected int intd;
 protected internal  int inte;
 private protected int intf;

 private int _age;
 private static int _bge;

局部变量:

 public  void PeopleMothod() 
 {
     //局部变量
     int a;
   //  Console.WriteLine(a);

     Console.WriteLine(b);
     Console.WriteLine(str);
     Console.WriteLine(f);
     Console.WriteLine(intArray);

     b = 200;
     char[] charArray = new char[3] { 'a', 'b', 'c', };
     str = new string(charArray);
     Console.WriteLine(str);
     Console.WriteLine(str1);
     str1 = str;
     Console.WriteLine(str);
     Console.WriteLine(str1);
     char[] charArray1 = new char[3] { 'c', 'b', 'a', };
     str1 =new string(charArray1);
     Console.WriteLine(str);
     Console.WriteLine(str1);

//字段的赋值: (深浅拷贝   )

   // b = 2;
   //浅拷贝
   // intArray1 = intArray;
   //数组深拷贝
   intArray.CopyTo(intArray1, 0);
   intArray1[0] = 10;
   foreach (var item in intArray1)
   {
       Console.WriteLine(item);
   }

   foreach (var item in intArray)
   {
       Console.WriteLine(item);
   }

实例化方法,以及调用方法:

 People people = new People();
 people.PeopleMothod();
 people.PeopleMothod1();

 people.PeopleMothod3();
 people.PeopleMothod2();

3.1  创建Person类的对象

 //创建Person类的对象 zhangsan
//通过new 关键字 开辟内存空间 为了 zhangsan对象的 实例成员    

 Person zhangsan = new Person();
 zhangsan._age  = 18;
 zhangsan._weight = 100;
 zhangsan._height = 180;
 zhangsan._sex = true;
 Person._type = "高级动物";
 zhangsan.PersonMothod();

Person类下面的方法:

 internal class Person {
     public int _age;
     public double _weight;
     public double _height;
     public bool _sex;

     //静态字段属于类
     public static string _type;
     public void PersonMothod() {
         Console.WriteLine(_age);
         Console.WriteLine(_weight);
         Console.WriteLine(_height);
         Console.WriteLine(_sex);
         Console.WriteLine(_type);
     }
 }

People类下面的方法:

internal class People {
    //静态字段
    private static int _id;
    // 非静态字段(实例字段)
    private int _count;
    public static void PeopleStaticMothod(){
        //用类名调用(可以省略)
       People._id = 100;
        //用类的对象调用
        People p = new People();
        p._count = 200;
    }
    public  void PeopleStaticMothod1()
    {

        //用类名调用(可以省略)
        People._id = 100;
        //用类的对象调用
        this._count = 200;
    }
}

4.只读与可读可写

   //可读可写  既能使用 也能修改
   public int _id = 10;
   //只读    只能使用 不能修改   
   public  const int _CONST_NUMBER =300;
   public  readonly int _readonlyNumber = 400;
   public  static readonly int _readonlyNumber1 = 500;
   //常量不能使用static描述
   // static const int _CONST_NUMBER1 = 300;

         方法定义:

  public void PeopleMothod() {

      _id = 30;
      Console.WriteLine(_id);

      //只读局部常量
      const double PI = 3.1415926;
      Console.WriteLine(PI);
      //使用只读全部变量
      Console.WriteLine(_CONST_NUMBER);
      //
      Console.WriteLine(_readonlyNumber);

  }

5.属性 和字段的关系

         //1.属性是类的成员函数
         //2.属性其实外界访问私有字段的入口
         //3.属性本质就是方法  一个属性可以分别有一个set 和get 方法组成。(或者称为访问器)
         //4.属性的名字用大驼峰命名  一般和对应的私有字段名字保持一致
         //5.属性的扩展 ---增加字段的业务判断逻辑。        

get 和 set 方法:

 internal class People {

     private int _age;
     //成员函数 属性    
     public int Age
     {  
         //get方法  设置字段的可读性
         get { return _age;} 

         //set方法 设置字段的可写性
         set { _age = value; }
     }


     private int _id;

     //只写属性
     public int Id { set { _id = value; } }

     //只读属性
     private int _id2 = 200;
     public int ID2 { get { return _id2; } }

     //
     private int _ID3;
     public int ID3 {
         set {

             if (value < 100)
             {

                 _ID3 = 100;
             }
             else {

                 _ID3 = value;
             
             }           
         }
         get { return _ID3; }         
     }

     //可读可写属性 
     public string StrNumber { get; set; }
     //给属性设置默认值
     public string StrNumber1 { get; set; } = "你好";
     //给属性设置默认值  
     public string StrNumber2 { get; } = "你好123";
     private void PeopleMothod() {

         _age = 18;
     }
 }

调用方法:

 People zhangsan = new People();
 //给属性赋值  调用内部set方法
 zhangsan.Age = 10;
 //使用属性  调用内部get方法
 Console.WriteLine(zhangsan.Age);
 zhangsan.Id = 100;
 // Console.WriteLine(zhangsan.Id);

 //zhangsan.ID2 = 200;
 Console.WriteLine(zhangsan.ID2);
 zhangsan.ID3 = 1000;
 Console.WriteLine(zhangsan.ID3);
 zhangsan.ID3 = 80;
 Console.WriteLine(zhangsan.ID3);

 zhangsan.StrNumber = "123";
 Console.WriteLine(zhangsan.StrNumber);
 zhangsan.StrNumber1 = "nnn";
 Console.WriteLine(zhangsan.StrNumber1);
// zhangsan.StrNumber2 = "123";
 Console.WriteLine(zhangsan.StrNumber2);

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值