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

c#基础09(类与对象)

文章目录

    • 类与对象
      • 面向对象概念
      • 封装
        • 访问修饰符
        • 如何定义类
        • 字段与属性
      • 类的对象
      • 构造方法
      • 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.xdnf.cn/news/708283.html

相关文章:

  • HTML实战项目:高考加油和中考加油
  • Git 教程 | 如何将指定文件夹回滚到上一次或某次提交状态(命令详解)
  • 免费开源批量图片格式转换工具
  • 再见Notepad++,你好Notepad--
  • ADB推送文件到指定路径解析
  • AI+微信小程序:智能客服、个性化推荐等场景的落地实践
  • 新版LangChain向量数据库VectorStore设计详解
  • 基于KG生成语料增强解决RAG问答幻觉问题的简单框架-WalkRetrieve
  • 【Redis】string 类型
  • 【Doris基础】Apache Doris vs 传统数据仓库:架构与性能的全面对比
  • 架构意识与性能智慧的双重修炼
  • 为 Ubuntu 安装的软件创建桌面图标
  • qt结构化绑定的重大缺陷:只能创建局部变量
  • Knife4j框架的使用
  • WPF的布局核心:网格布局(Grid)
  • 【海康USB相机被HALCON助手连接过后,MVS显示无法连接故障。】
  • forward(转发)和redirect(重定向)
  • Spring AI(9)——MCP客户端
  • HackMyVM-Dejavu
  • Spark-Core Project
  • scp 命令
  • Unity开发之Webgl自动更新程序包
  • 4.1.1 Spark SQL概述
  • spark在执行中如何选择shuffle策略
  • Java开发经验——阿里巴巴编码规范实践解析6
  • 【Linux篇】叩响新世界的大门:线程
  • 【stm32开发板】原理图设计(电源部分)附:设计PCB流程
  • SmolVLM2: The Smollest Video Model Ever(七)
  • Kafka核心技术解析与最佳实践指南
  • BPE、WordPiece 与 Unigram:三种主流子词分词算法对比