C#面向对象的三特性其一:封装

本文详细介绍了C#中的面向对象编程特性之一——封装。内容涵盖类与对象的概念,成员变量与访问修饰符的使用,成员方法、构造函数、析构函数和垃圾回收机制,以及成员属性、索引器、静态成员、静态类和静态构造函数。此外,还讨论了拓展方法、运算符重载、内部类和分布类等相关知识,帮助读者深入理解C#的封装特性。
摘要由CSDN通过智能技术生成

一.类与对象


1.类的概念

类是 具有相同特征  具有相同行为 的一类事物的抽象

类是对象的模板,可以通过类来创建对象.

类的关键词是class


2.类申明的位置

类申明在 namespace 语句块中

同一语句块中不能出现明名重复的类


3.类声明的语法

public class classname
    { 
       //特征——成员变量
       //行为——成员方法
       //保护特征——成员属性
       
        //构造函数和析构函数
        //索引器
        //运算符重载
        //静态成员
    }

    //命名用帕斯卡命名法

4.(类)对象

类的申明 和 类对象(变量) 的申明是两个概念

类的申明类似 枚举结构体 的申明,相当于申明了一个自定义变量类型

而对象 是类创建出来的

相当于申明了一个指定类的变量

类创建对象的过程 一般称为实例化对象

类对象 都是引用类型


5.实例化对象基本语法

类名 变量名;

类名 变量名 = null;(null代表空)

类名 变量名 = new 类名();

例:

 //分配的内存空间为空
            Person p;
            Person p1 = null;
            //分配了内存空间
            Person p2 = new Person();
            Person p3 = new Person();
            //要几个对象就new几个对象

注意!  实例化后的两个对象可视作不同的个体  他们之间的属性互不相关


二.成员变量与访问修饰符


1.成员变量的概念

成员变量是 申明在类语句块中的用于描述成员特征的变量

可以是任意的变量类型包括自己所处的类

注意:不能在类中实例化与自己同类的变量!!!



     //定义一个位置结构体
     struct Position
     {
       //定义变量
       public int x;
       public int y;
       //构造函数
       position (x,y);
       //函数方法

     }
     //定义一个性别枚举    
     enum E_SexType 
     {
       man,
       woman,
     }
     
     class person
     {
       int age;
       string name = "";  //可以初始化
       E_SexType sex;
       Position pos;  
       person[] boyfriend;
       person girlfriend = new person; //初始化后会报错!!
       
     }

2.访问修饰符 (3p)

[1] public -- 公共的 自己(内部) 和 别人(外部) 都能访问和使用

[2]private -- 私有的 自己(内部)才能访问和使用,不写默认为private

[3]protected -- 保护的 自己(内部) 和 子类 才能访问和使用

3.成员变量的使用和初始值

使用:先实例化

person p = new person();

然后

p.age = 10;

值类型 数字类型默认为0

            bool类型默认为false

引用类型默认为 null

判断默认值的小技巧

例如:如果我们要了解bool类型的默认值:

Console.WriteLine(default(bool));


三.成员方法


1.概念

成员方法(函数) 用于表现对象行为

[1]申明在类语句块中

[2]是用来描述对象行为的

[3]规则和函数申明规则相同

[4]受到访问修饰符规则影响

[5]返回值参数不做限制

使用方法例如


   class Person
   {
     //判断是否成年
     public bool IsAdult()
     {
      return age >= 18;
     }
     //说话行为
     public Speak(string str)
     {
       IsAdult();
       Console.WriteLine("{0}",str);
     }
    
     //成员变量初始化
     public string name;    
     public int age;
   }
  
   static void Main(string[] args)
   {
     //使用成员方法
     //先实例化对象
     Person p = new person();
     //成员变量赋值
     p.name = "小明";
     p.age = 18;
     使用说话方法
     p.Speak("我爱你");
     
     if(p.IsAdult())
     {
         p.Speak("我要耍朋友");
     }

   }

2.应用

我们可以利用这一特性来封装函数,例如:

在数组的增删查改中

我们可以定义类的数组然后


   class Person
   {
     //定义一个新的成员方法
     public void AddFriend(person p)
     {
        //传入的值为空时,仅开辟一个新空间
        if(friends == null)
        {
           friends = new Person[]{p};
        }
        else 
        {
        //新建一个数组
        Person[] newFriends = new Person[friends.Length+1];
        //搬家
        for(int i = 0 ; i < friends.Length ; i++)
          {
            newFriends[i] = friends[i]; 
          }
        //把新加的朋友放到最后一个
          newFriends[newFriends.Length - 1] = p;
        //地址重新定向
          friends = newFriends;
        }
     }
     //成员变量初始化
     public string name;
     public int age;
     public person[] friends; 
   }
  
   static void Main(string[] args)
   {
     
     Person p1 = new Person();
     person p2 = new Person();
     p2.name = "梁非凡";
     p2.age = 16;
     
     p1.AddFriends(p2);
     //打印friends
     for(int i = 0 ; i < p.friends.Length ;i++)
     {
        Console.WriteLine(p.friends[i].name);
     }
   }   

四.构造函数、析构函数、垃圾回收机制


1.构造函数(与结构体类似)

【1】 基本概念

在实例化对象时 会调用用于初始化的函数

如果不写 默认存在一个无参构造函数


                
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值