当前位置: 首页 > news >正文

C#面向对象三大特性的封装

面向对象三大特性

封装、继承、多态

封装

广义上:任何只要把一些代码和数据集中到封闭的作用域区间中我们都认为是一种封装

狭义上:将类的某些信息(字段)隐藏在类的内部,不允许外部程序直接访问,而是通过该类提供的一些特有的方法(Get和Set访问器)来实现对隐藏信息进行操作和访问

意义:

  • 隐藏类中实现细节。

  • 只能通过规定的方式或者是方法来访问数据

  • 方便在程序中添加一些控制性语句

  • 方便后续的代码的迭代和更新

如何使用封装步骤:

1.设置类中的字段为私有的,即使用关键字private

2.创建公有的属性,在属性中添加get和set方法-->用于对私有字段进行读和写操作。

3.在Get和Set方法中添加对私有字段的一些控制性语句(对一些些合法性数据的校验)

属性

类中的属性是为了对类中的字段进行读写操作

一般情况下,属性本身不作为数据的存储容器

属性也可以设置默认值

语法格式:

public 数据类型 属性名称

{

get{

return 字段名称;

}

set{

字段名称=value;

}

}

public数据类型属性名称{get;set}=属性值;------->这种情况下可以设置属性值一般不用

读写属性

我们可以灵活的通过添加Get和Set访问器来对属性进行读写操作

添加get属性.....>读操作权限

添加set属性----->写操作权限

示例:

//定义一个教室类
internal class Tacher
{private string _name;private int _age;public string Name { get { return _name; } set { _name = value;}}
​
public int Age { get { return _age; } set { _age = vaalue;}}
}

构造方法

构造方法主要是用来创建类的对象的(类的实例化)附带效果,可以对对象中的字段进行初始化(赋值)

语法格式
//语法格式:
public当前类名(参数列表)
{//对当前类中的字段进行赋值
}
示例public class Student
//定义两个字段
private string _name;
private int _age;
//给当前类定义一个构造方法--带参构造方法
public Student(string name, int age)
{
name = name;
_age = age;
}
//给当前类定义一个无参构造方法
public Student()
{
}

备注:

  • 有参构造方法,在对象创建时,字段的默认值由开发者传入赋值

  • 无参构造方法,在对象创建时,字段的默认值由系统传入赋值(默认值)

  • 如果在类中没有手动定义构造方法,系统会默认赠送一个无参构造方法,但如果开发者在类中手动定义了一个构造方法,系统赠送的无参构造方法就收回了。此时个人还想使用无参构造方法,需要开发者自己定义出来

  • 类中的构造方法是支持方法重载的

  • 构造方法没有显示的返回值,不需要在定义构造方法时声明返回值类型

静态构造函数方法

静态构造方法在创建第一个实例或引用类中静态成员之前自动调用,并且在整个程序运行中自会加载一次

静态构造方法是为了初始化类中的静态数据

特点:

1.不能添加任何访问权限修饰符,不能含有任何参数

2.不支持方法重载

3.用户不能手动调用,是程序运行的一种特殊方法

4.静态构造方法是在普通构造方法之前先加载。

//没有访问权限修饰符 不能带有参数,加载时机时调用实例构造方法或调用类中的静态成员之前加载
static 类名称
{}

私有构造方法

表示的是该方法只能在当前类中使用或者创建对象,不能在外类中进行类的实例化

它的访问权限修饰符使用privater

namespace_02_私有构造方法
​
internal class Program
{
static void Main(string[] args){
// People people = new People();
People people = People.GetInstance();
}
}
//定义一个类
internal class People
{
//默认有一个无参构造方法
//但是一旦自己定义了构造方法,此时类中将不再有无参构造方法
//定义成私有的private
private People() {
}
//此时该类需要提供一个可以对外能够访问到的静态方法
public static People GetInstance()
{
return new People();
}
//如果类中的构造方法定义成私有的,也就代表着该类中所有的信息都是是静态的,需要通过类名来进行访问

析构函数

主要是用于清理回收程序中创立的实例对象

特点:

  • 只能在类中定义,不能在结构体中定义

  • 一个类中只能定义一个析构函数,所以不支持重载

  • 析构函数不能声明带有返回值类型

  • 析构函数也不能手动调用,只能由程序自动调用

  • 析构函数不能添加任何访问修饰符,也不能带有任何参数

internal class Program
{
static void Main(string[] args)
{
People p1 = new People();
People p2 = new People
People p3 = new People
Console.WriteLine("程序即将结束");
3
//定义一个class类
internal class People
{
public People()
{
Console.WriteLine("创建了一个People对象");
}
//定义析构函数
~People()
}
Console.WriteLine("这是People类的析构函数");
//System.Console.
}
}

备注:

  • 析构函数是用于释放程序中创建的对象,如果对象创建一次,析构函数执行一次,如果对象创建多次,析构函数执行对应的次数

  • 析构函数是在程序即将结束的时候执行,自动执行的

static关键字

internal class Program
{public static void Main(string[] agrs){}
}

static关键字在C#程序中表达的是静态的,它是一个修饰符,可可以修饰类,字段,属性,方法,常量等等信息

当类中的某个信息被static修饰,那就代表该信息是一个静态的,静态的就代表着它是属于类的,不再属于对象的,无法通过对象来访问,只能通过类名来访问

通过类名访问的方式我们称之为静态方式,通过对象的方式访问我们称之为实例方式。

1.当static修饰类的时候代表该类是一个静态类

在静态类中,只能定义静态信息:静态的字段,静态的属性,静态的方法

静态类不能进行实例化(创建对象)

2.当static 修饰方法的时候,代表方法时一个静态方法

在静态方法中,不能直接访问非静态信息(实例信息):非静态字段,非静态属性,非静态的方法

3.当static 修饰属性或者字段时候代表他是一个静态属性或者静态字段

它既可以在静态方法中也可以在非静态方法中使用.

它不能通过对象来访问,只能通过类名来访问。

this关键字

翻译过来是:这个,这,用于指代某个信息的,具体指代它所在的当前类的一个实例化对象

this指代:谁调用了我,我就指代谁

namespace_05_this关键字
{
internal class Program
}
static void Main(string[] args)
{
Student student = new Student();
student.id = 10001;
student.name="张三";
Student student2 = new Student();
student2.id = 10002;
student2.name="张四";
student.Show(/*student*/);
}
}
//定义一个类
internal class Student
{
public int id;
public string name;
}
//this可以指代对象做区别通过对象调用的自然就是字段(成员变量~全局变量)
public Student(int id, string name)
{
//就近原则
this.id = id;
this.name = name;
}
//指代当前类的一个对象,谁调用我,我就指代谁
public void Show(/*Student student*/)
{
//隐藏了对象的调用
//Student student = new Student();
Console.WriteLine(/*this.*/id+"----" + /*this.*/name);
}
}
}
http://www.lryc.cn/news/597243.html

相关文章:

  • C#定时任务实战指南:从基础Timer到Hangfire高级应用
  • 【系统全面】常用SQL语句大全
  • 避坑:C# json反序列化为float精度丢失
  • 棱镜技术在光谱相机中应用
  • 第八章 W55MH32 HTTP Client示例
  • 机器人行业工商注册企业基本信息数据(1958-2023年)
  • 9.0% 年增速驱动!全球自清洁滚轮拖布机器人市场2031年将迈向 946 百万美元
  • [spring6: @EnableWebSocket]-源码解析
  • [深度学习] 大模型学习3下-模型训练与微调
  • (Arxiv-2025)OmniGen2:通向先进多模态生成的探索
  • springboot集成LangChain4j
  • 华为仓颉编程语言实践体验
  • 开源 Arkts 鸿蒙应用 开发(十)通讯--Http数据传输
  • 高级IO简单介绍
  • 小架构step系列23:加载自定义配置
  • 基于 XGBoost 与 SHAP 的医疗自动化办公与可视化系统(上)
  • 快速梳理遗留项目
  • AI聊天方案:vue+nodeJs+SSE
  • Git 常用的提交类型
  • NX741NX777美光固态闪存NX783NX791
  • CentOS 7 Linux 基础知识点汇总
  • Day01_C++
  • 河南萌新联赛2025第二场-河南农业大学
  • 第九讲:C++中的list与forward_list
  • (进阶向)Python第十三期,opencv的图像预处理方法[1]
  • 性能测试-jmeter实战5
  • 28. 探秘重写与重载:面向对象基础
  • ubuntulinux快捷键
  • Ubuntu 1804 编译ffmpeg qsv MediaSDK libva 遇到的问题记录
  • freqtrade在docker运行一个dryrun实例