Day09~12_C#.面向对象

01. 类的基本定义

  [public] class 类名{

  }

  在类中,this : 表示当前类的实例化对象;

  类是不占内存的,但类的实例化对象是占内存的;

02. 字段、属性、方法

  字段:用于描述一个类的相关特征的信息,在C#中,一般使用 _小写字母 表示;  (相当于Delphi中的 private XXXX;)

    如: private String _name;    private int _age;

    字段在赋值时,无任何约束,有可能会产生一些无意义的内容;

    如:  xxx._age = -10;    年龄赋值-10,是不符合实际应用规则的;

  属性:是对字段的一种封装,是对特定字段上一些规则的应用;

    

 1           publi String Name{get;set;}  
 2 
 3       public int Age{
 4 
 5         get{ return _age;}
 6 
 7         set{ 
 8 
 9           if(value>0){
10 
11             _age = value;
12 
13           }
14 
15         }
16 
17       }

 

    当有相关约束时,可以在相应的 get函数,或set函数中进行配置处理

    相当于Delphi中的 property

03.关于静态与非静态的区别

  a.   在非静态类中,既可以实例成员,也可以有静态成员;

  b.   在调用实例成员的时候,需要使用对象名.实例成员;

    在调用静态成员的时候,需要使用类名.静态成员名;

  >>   静态成员必须使用类名去调用,而实例成员使用对象名调用;

    静态函数中,只允许访问静态成员,不允许访问实例成员;

    实例函数中,既可以使用静态成员,也可以使用实例成员;

  >>   静态类不允许实例化;

    静态类在整个项目中资源共享;

04.构造方法

  public 类名(){ }

  >> 构造函数,必须为 public , 无返回值,连 void 也不行;

    构造函数的名称,必须和类名一样;

    构造函数可以重载;

  >>类中未写构造函数时,系统默认配置一个无参构造函数;

    当类中写了构造函数后,系统将不再默认提供无参构造函数;此时若再需要无参构造函数,需要自行写入一个;

05. this 关键字

  >> 构造函数调用另外一个构造函数

    

  >>  析构函数 (如果不配置檄构函数,系统资源将由GC回收资源)

    

 06.值类型 和 引用类型

  区别:

    1. 值类开和引用类型在内存上存储的地方不一样;

    2. 在传递值类型和传递引用类型的时候,传递的方式不太一样;

    值类型我们称之为值传递,引用类型我们称之为引用传递;

    值类型:

        int, double, bool, char, decimal, struct, enum;

        值存储在栈中;

    引用类型:string, 自定义类、数组..

        值存储在堆中;

  >>实时监测窗口调出

    

 

    

 

  >> 快速给字段生成属性

    

 

     

 

 

 

 

 

   >>字符串与数组的转换:

    

 

  >>字符串的一些方法

   

 1 //转大写
 2             ck = a.ToUpper();
 3             //转小写
 4             ck = a.ToLower();
 5             //取长度
 6             int c = a.Length;
 7             //是否相同比较,区分大小写
 8             flag = a.Equals(b);
 9             //是否相同比较,不区分大小写
10             flag = a.Equals(b, StringComparison.OrdinalIgnoreCase);
11             //分割字符串
12             //.折分标准
13             char[] chs = { ' ', '_', '+' };
14             //拆分后,返回的数组中,拆分标位对应位置会返回空字符串""
15             string[] str = a.Split(chs);
16             //拆分后,拆分标准会被清理掉,只保留有效字符
17             str = a.Split(chs, StringSplitOptions.RemoveEmptyEntries);
18             //字符串替换
19             a = a.Replace("原内容", "新内容");
20             //字符串取子串 (开始位,子串长度): 从指定位置开始取指定长度子串,若不写长度,默认从指定位置开始到结束
21             a.Substring(0, a.Length - 1);
22             //判断是否以XX开始
23             flag = a.StartsWith("开始内容");
24             //判断是否以XX结束
25             flag = a.EndsWith("结束内容");
26             //判断是否包含xx
27             flag = a.Contains("内容");
28             //从开始位取首个匹配点
29             c = a.IndexOf("内容");
30             //从结束位开始取首个匹配点 (参数2为含量量,匹配时包括这个位置),无匹配时返回-1
31             c = a.LastIndexOf("内容", 1);
32             //去空
33             b = a.Trim();
34             b = a.TrimStart();
35             b = a.TrimEnd();
36             //判断是否为空
37             flag = string.IsNullOrEmpty(ck);        // null, "" 返回true, 否则false
38             flag = string.IsNullOrWhiteSpace(ck);   // null, "", "    " 都返回true, 否则为false;
39             //字符串连接
40             b = string.Join("|", "张三", "李四", "王五", "赵六");

 

 07. 继承

  public class 子类: 父类{   }

  特性:

    继承的单根性:一个子类只能有一个父类;

    继承原传递性;

   >> 子类调用父类的构造函数

    

 

  >> new 关键字的作用

    * 实例化对象

    * 隐藏从父类中继承过来的同名成员;

      --> 隐藏的结果:子类调用不到父类的成员; 

 

08. 里氏转换

  >> 子类可以赋值线父类;

  >> 如果父类中装的是子类,可以将这个父类强制转换为子类对象;

  >>  is : 判断一个对象是否是某个类型的对象;  如果是,则返回 True, 否则 返回 False

  >> as: 将一个对象转换为某个类型的对象; 如果能转换,返回对应类型的对象,否则返回 null; 

 

09. 集合 ArrayList

  >> 长度可以改变,类型可以自定义;

  >> ArrayList 的创建及一些方法

    

 

10. HashTable   键值对的集合

    

 

 11. Path 类

     

 

12.File 类

    文件操作 类;

    >> 编码转换

      

      

 1 static void Main(string[] args)
 2         {
 3             String ki = "";
 4             String chgInfo = "A张三,你好呀a";
 5             String ckinfo = "";
 6 
 7             Encoding fromE= Encoding.GetEncoding("utf-8");
 8             Encoding toE = Encoding.GetEncoding("gb2312");
 9 
10             byte[] fromB = fromE.GetBytes(chgInfo);
11             byte[] toB = Encoding.Convert(fromE, toE, fromB);
12 
13             for (int i = 0; i < fromB.Length; i++)
14             {
15                 if (ckinfo == "")
16                 {
17                     ckinfo = fromB[i].ToString();
18                 }
19                 else
20                 {
21                     ckinfo = ckinfo +"," + fromB[i].ToString();
22                 }
23             }
24             Console.WriteLine(ckinfo);
25 
26 
27             ckinfo = "";
28             for (int i = 0; i < toB.Length; i++)
29             {
30                 if (ckinfo == "")
31                 {
32                     ckinfo = toB[i].ToString();
33                 }
34                 else
35                 {
36                     ckinfo = ckinfo + "," + toB[i].ToString();
37                 }
38             }
39             Console.WriteLine(ckinfo);
40 
41             Console.ReadKey();
42         }

     >> File的读取操作

       

 

     >> List<T> 泛型

    >> Dictionary<键类型,值类型>;

    >> FileStream: 文件流;   >  操作字节

      

 

      *> 可以使用 using(){   }  来实现自动释放;

    >> StreamReader 和 StreamWriter : 对文本文件的处理   

      > StreamReader:  返回字符串

        文件尾部识别:  StreamReader.EndOfStream;  

      

 13. 多态

  >>实现多态的三种方法:

    a. 虚方法;

      > 将父类方法,标记为虚方法;

        父类中标识: public virtual void doTask();  虚方法,允许有方法体;

        子类中重写:    public override void doTask();   如果不重写,调用的,仍然是父类的方法;

    b. 抽象类;

      > 将一个类标识为抽象类:  public abstract class xxxx;

      > 类中的方法,标识为抽像方法;  public abstract void doTask();   抽像方法没有方法体;

      > 实现类继承抽象类,在实现类中对方法重写,完成真实的业务处理;   public override void doTask();  

    c. 接口;

posted @ 2022-04-14 15:07  耗喜天涯  阅读(30)  评论(0编辑  收藏  举报