c#基础09(类与对象)

article/2025/8/29 10:04:48

文章目录

    • 类与对象
      • 面向对象概念
      • 封装
        • 访问修饰符
        • 如何定义类
        • 字段与属性
      • 类的对象
      • 构造方法
      • this关键字

类与对象

面向对象概念

  • 并不是一个技术,而是一种编程指导思想。
  • 把现实世界的具体事物全部看出一个一个的对象来解决实际问题。

面向对象编程共同三大特性:封装、继承、多态。

注意:

在C#中,一切皆为object(对象)

封装

封装 被定义为"把一个或多个项目封闭在一个物理的或者逻辑的包中"。在面向对象程序设计方法论中,封装是为了防止对实现细节的访问。抽象和封装是面向对象程序设计的相关特性。抽象允许相关信息可视化,封装则使开发者实现所需级别的抽象。

访问修饰符

一个 访问修饰符 定义了一个类成员的范围和可见性。C# 支持的访问修饰符如下所示:

  • public:所有对象都可以访问;

  • private:对象本身在对象内部可以访问;

  • protected:只有该类对象及其子类对象可以访问

  • internal:同一个程序集的对象可以访问;

  • protected internal:访问限于当前程序集或派生自包含类的类型。
    在这里插入图片描述
    实现封装的方式:类的封装、属性封装、方法的封装。

封装的作用

  • 隐藏细节,设置访问权限,提高安全性
  • 代码复用。
  • 提高代码的可读性

类是一组具有相同事物和行为的抽象(物以类聚)。

对象:是真实存在的具体实例。

(设计图):是对象共同特征的描述(抽象)。

在C#中必须先设计类,才能获得对象。

如何定义类

定义类的关键字是class,命名规范为首字母大写。

<访问修饰符>class 类名
{//构造器//字段//属性//方法//事件//索引器
}public class Person
{//字段private string name;//属性public string Name{get{return name;}set{name = value;}}//方法public void eat(){Console.WriteLine("吃饭,我要吃火锅!");}
}

其中,字段,属性,方法,被统称为类的成员。字段,属性被称为成员变量,方法被称为成员方法。访问标识符指定了对类及其成员的访问规则。如果没有指定,则使用默认的访问标识符。类的默认访问标识符是 internal,成员的默认访问标识符是 private

字段与属性

字段一般是私有的(private),属于类的私有信息,如:姓名,年龄,身份证号等等信息都是属于人类的私有信息。

public class Person
{private string name;private int age;
}

示例:

public class Person
{private string name;private int age;public string Name{get{return name;}set{name = value;}}public int Age{get{return 18;}set{age = value;}}
}

小贴士:

Get,Set访问器都可以设置访问修饰符,默认的访问修饰符都是public

C#9.0之后还支持Init访问器,调用可使用属性初始化表达式语法,在创建表达式中设置这些值。但构造完成后,这些属性将变为只读。

字段与属性的区别

  • 字段是私有的,属性是公开的。

  • 属性具有读写器(get,set)

  • 字段命名,以小驼峰命名。

  • 属性并没有真正存储数据

只读属性

也就是只提供了, Get 访问器,没有Set 访问器。

public class Person
{private short orderStatepublic string OrderState{get{switch(orderState){case 1:return "待支付";case 2:return "待发货";case 3:return "待收货";case 4:return "已完成";default:return "待支付";}}}}
}

只写属性

也就是只提供了, Set 访问器,没有Get 访问

public class Person
{private string pwdpublic string Password{set { value = pwd;}}
}

属性简写

public class Person
{private string name;private int age;public string Name{get { return name; }set { value=name; }}public int Age{get { return 18; }set { value = age; }}
}
// 简化后
public class Person
{public string Name {get; set;}public int Age {get; set;}
}

类的对象

语法:

类名 对象名 = new 类名();
如:
Person per = new Person();

使用对象

访问属性: 对象名.成员属性
访问行为: 对象名.方法名(…)

示例:

using System;namespace leistudy
{internal class Program{static void Main(string[] args){#region 属性的赋值与读取//创建人类的对象Person person = new Person("李四","00156","男");//给属性赋值//person.Name = "李四";//person.Idcard = "00156";//person.Sex = "男";Console.WriteLine($"name = {person.Name}\nidcard = {person.Idcard}\nsex = {person.Sex}");//Console.WriteLine($"name = {person.name}\nidcard = {person.idcard}\nsex = {person.sex}");//方法的调用person.Eat();Person person1 = new Person("王刚","1876","男");person1.Eat();Person person2 = new Person("李白","1006","男");person2.showall();person2.Eat();Person person3 = new Person();Animal animal = new Animal(){Name = "小白",Age = 2,Color = "白色"};Console.WriteLine($"{animal.Name},{animal.Age}");//animal没有分配内存空间,只是指向了animal的地址Animal animal1 = animal;animal.Name = "小黑";Console.WriteLine(animal.Name);Console.WriteLine(animal.Age);updata(animal1);Console.WriteLine(animal.Age);//引用类型在传递参数时,传递的是地址,除了string#endregion}static void updata(Animal a){a.Age = 1000;}}
}

构造方法

构造方法的作用

  • 用于初始化一个类的对象,并返回对象的地址。
  • 简化对象初始化的过程

语法

修饰符 类名(形参列表)
{...
}
public class Car
{...// 无参数构造器public Car(){...}// 有参数构造器public Car(String n, String b){...}
}

初始化对象的格式

类名 对象名称 = new 构造器;
Car c = new Car();   

构造器的分类

  • 无参数构造器(默认存在的):初始化的对象时,成员变量的数据均采用默认值。
  • 有参数构造器:在初始化对象的时候,同时可以为对象进行赋值。

注意事项

  • 任何类定义出来,默认就自带了无参数构造器,写不写都有。
  • 一旦定义了有参数构造器,无参数构造器就没有了,此时就需要自己写一个无参数构造器了。
public class Car
{...// 无参数构造器(默认存在的)
}
public class Car
{public Car(){// 无参数构造器(需要写出来了)}public Car(String n, String b){// 有参数构造器}
}

this关键字

假设有如下一段代码:

public class Person
{private string name;private string age;public Person(string name,string age){name = name; // 此处很有可能会有问题!!age = age; // 此处很有可能会有问题!!}
}

编译器很有可能分不清 name 到底是形参还是成员变量,怎么破? this 关键字就可以帮忙解决。

this关键字

  • this关键字可以出现在成员方法、构造器中,代表当前对象的地址。

  • 作用:访问当前对象的成员变量、成员方法。

public class Person
{private string name;private string age;public Person(string name,string age){this.name = name;this.age = age;}
}

http://www.hkcw.cn/article/ODylsBrXOy.shtml

相关文章

ai工具集:AI材料星ppt生成,让你的演示更出彩

在当今快节奏的工作环境中&#xff0c;制作一份专业、美观的 PPT 是展示工作成果、传递信息的重要方式。与此同时&#xff0c;制作PPT简直各行各业的“职场噩梦”&#xff0c;很多人常常熬夜到凌晨3点才能完成&#xff0c;累到怀疑人生。 现在&#xff1f;完全不一样了&#x…

高速连接器设计的真相

在高速连接器设计领域&#xff0c;有两种相反的想法。对于某些人来说&#xff0c;如果你简单地将塑料和金属碎片放在一起&#xff0c;最终你会得到信号传输。这个过程非常简单。另一方面&#xff0c;有一种观点认为&#xff0c;可靠的连接器设计需要对电磁理论有深入的理解&…

计算机视觉---YOLOv4

YOLOv4&#xff08;You Only Look Once v4&#xff09;于2020年由Alexey Bochkovskiy等人提出&#xff0c;是YOLO系列的重要里程碑。它在YOLOv3的基础上整合了当时最先进的计算机视觉技术&#xff0c;实现了检测速度与精度的显著提升。以下从主干网络、颈部网络、头部检测、训练…

IP地址交换如何让车联网效率翻倍?

在车辆移动过程中实现稳定可靠的网络连接&#xff0c;是智能交通系统发展的关键技术之一。车辆行动通讯网络&#xff08;VANET&#xff09;通过车载设备和路边基础设施的配合&#xff0c;使车辆在行驶中能够接入互联网。要实现这一目标&#xff0c;每辆车都需要获得唯一的IP地址…

DexWild:野外机器人策略的灵巧人机交互

25年5月来自 CMU 的论文“DexWild: Dexterous Human Interactions for In-the-Wild Robot Policies”。 大规模、多样化的机器人数据集已成为将灵巧操作策略泛化到新环境的一条有效途径&#xff0c;但获取此类数据集面临诸多挑战。虽然遥操作可以提供高保真度的数据集&#xf…

大连格恩朗椭圆齿轮流量计:工业流量测量的精密刻度尺

在工业生产的庞大脉络中&#xff0c;流体流量的精准测量如同心脏监测仪之于人体&#xff0c;细微偏差可能导致整个系统的失衡。大连格恩朗椭圆齿轮流量计以**0.5%的精度**&#xff08;部分型号达0.2%&#xff09;成为工业流量领域的“精密刻度尺”&#xff0c;其核心原理如同一…

【NebulaGraph】查询案例(七)

【NebulaGraph】查询案例 七 1. 查询语句12. 查询语句23. 查询语句34. 查询语句4 1. 查询语句1 GO FROM "player100" OVER * YIELD type(edge) AS link, properties($$) AS properties,tostring(src(edge)) AS src,tostring(dst(edge)) AS dst, tags($$) AS tagLi…

database disk image is malformed 的解决方法

Sqlite数据库在执行时报错&#xff1a;database disk image is malformed 解决方法: 1.重启电脑试下&#xff0c;或者重启服务试下 2.重新创建新的表&#xff0c;读出正确的部分的数据结构及数据 (1)命令行中定位到数据表的路径下&#xff1b; &#xff08;2&#xff09;执行如…

机动车结构化检测算法AI智能分析网关V4打造全场景应用解决方案

一、方案概述​ 随着交通管理智能化发展&#xff0c;精准高效的机动车信息检测需求迫切。AI智能分析网关V4基于深度学习与计算机视觉技术&#xff0c;具备强大的机动车结构化检测能力&#xff0c;可快速提取车辆关键信息&#xff0c;赋能交通管理与安防监控。本方案将围绕其技…

认识多系统萎缩:一种隐匿进展的神经退行性问题

多系统萎缩是一种罕见的神经退行性疾病&#xff0c;起病隐匿且呈进行性发展&#xff0c;平均发病年龄约 50 岁&#xff0c;男性略多于女性。 该疾病主要影响中枢神经系统多个部位&#xff0c;包括锥体外系、小脑、自主神经系统等。根据主要症状差异&#xff0c;可分为不同亚型&…

UE5蓝图中播放背景音乐和使用代码播放声音

UE5蓝图中播放背景音乐 1.创建背景音乐Cube 2.勾选looping 循环播放背景音乐 3.在关卡蓝图中 Event BeginPlay-PlaySound2D Sound选择自己创建的Bgm_Cube 蓝图播放声音方法二&#xff1a; 使用代码播放声音方法一 .h文件中 头文件引用 #include "Kismet/GameplayS…

【C语言极简自学笔记】项目开发——扫雷游戏

一、项目概述 1.项目背景 扫雷是一款经典的益智游戏&#xff0c;由于它简单而富有挑战性的玩法深受人们喜爱。在 C 语言学习过程中&#xff0c;开发扫雷游戏是一个非常合适的实践项目&#xff0c;它能够综合运用 C 语言的多种基础知识&#xff0c;如数组、函数、循环、条件判…

职业本科院校无人机专业人才培养解决方案

2023年的中央经济工作会议强调了以科技创新推动现代化产业体系构建的重要性&#xff0c;并提出发展生物制造、商业航天、低空经济等战略性新兴产业。低空经济&#xff0c;依托民用无人机等低空飞行器&#xff0c;在多场景低空飞行活动的牵引下&#xff0c;正逐步形成一个辐射广…

Text-to-SQL评估体系:从Spider 1.0数据集到2.0框架的跨越与革新

文章目录 一、引言&#xff1a;评估体系迭代推动Text-to-SQL技术发展二、Spider 1.0&#xff1a;跨领域语义解析数据集的奠基2.1 数据集构建与核心特征2.2 评估逻辑与技术局限 三、Spider 2.0&#xff1a;企业级工作流评估框架的崛起3.1 框架定位与核心组件3.2 工作流任务的革命…

电感器在数据中心电源系统中的应用及选型

当前&#xff0c;AI应用的加速落地带来了功耗的大幅提升&#xff0c;直接推动了数据中心电源需求的增长。根据国际能源署2023年的数据&#xff0c;全球数据中心能耗占比已超全球电力消耗的3%&#xff0c;单台A100 GPU服务器峰值功耗已经突破10kW。数据中心功耗的大幅提升&#…

WordPress搜索引擎优化的最佳重定向插件:进阶指南

在管理网站时&#xff0c;我们经常需要调整网页地址或修复错误链接。这时&#xff0c;通过重定向不仅能有效解决这些问题&#xff0c;还能显著提升网站在搜索引擎中的排名。对于熟悉基础重定向插件的用户来说&#xff0c;一些功能更强大的工具可以帮助你更全面地管理网站&#…

Codejock ToolkitPro 与 BCGControlBar Pro 深度对比

Codejock ToolkitPro 与 BCGControlBar Pro 深度对比 在 MFC (即 Microsoft Foundation Classes)基础上开发框架应用时&#xff0c;控件 UI 的环境一直是个难题&#xff1a;原生控件设计落后&#xff0c;不支持现代化主题&#xff0c;缩放适配性差&#xff0c;形成了 MFC 开发…

2.qml使用c++

目录 1.概述2.注册方式3. 分类①枚举类②工具类③数据类④资源类②视图类 1.概述 qml是用来干嘛的&#xff1f; 当然是提高UI开发效率的 为什么要混合C&#xff1f; 因为qml无法处理密集型数据逻辑 而加入c则兼顾了性能 达到11>2 总结就是 qml 开发UI, C 实现逻辑 而js的用…

复合机器人:纠偏算法如何重塑工业精度与效率?

在智能制造领域&#xff0c;复合机器人正成为柔性生产与高精度作业的核心载体。面对“复合机器人有纠偏算法吗&#xff1f;”这一行业高频问题&#xff0c;富唯智能以多模态纠偏技术体系给出了答案——通过自研的AI驱动纠偏算法与多传感器融合方案&#xff0c;复合机器人不仅能…

[ Qt ] | QPushButton常见用法

目录 绑定键盘快捷键 前面已经说了很多用法了&#xff0c;下面主要说说绑定键盘&#xff0c;设置Icon图片。 绑定键盘快捷键 实现四个按钮&#xff0c;可以使用wsad来控制另一个按钮的上下左右的移动。 #include "widget.h" #include "ui_widget.h"Wid…