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

C#学习笔记(九)

C#学习笔记(九)

    • 第六章 面向对象编程(一)类与对象、字段与属性
      • 一、类与对象正确的理解
        • 1. 什么是类?
        • 2.什么是对象?
        • 3. 类与对象的区别
      • 二、类的基本规范和对象使用
        • 1. 类的规范
      • 三、类的访问修饰符(简述)
        • 1. 项目和程序集
        • 2. 类的访问修饰符public和internal
      • 四、字段与属性
        • 1.字段
          • 字段的修饰符public 和 private
        • 2.属性
          • 2.1属性的定义与发展史
            • 2.1.1 .NET2.0时代
            • 2.1.2属性的结构
            • 2.2.3 为什么用属性
            • 2.1.4 .NET3.0时代
            • 2.1.5 .NET4.6时代
            • 2.1.6 class类型的属性以及属性数组

第六章 面向对象编程(一)类与对象、字段与属性

在 C#程序中,类是程序的基本单元,程序不管多么简单多么复杂,都是由不同的类组成。如何写好项目需要的类?

一、类与对象正确的理解

1. 什么是类?

举个例子,如何在程序中创建一张居民身份证。
首先身份证包含的信息有:姓名、性别、民族、出生日期、住址、身份证号。

    public class ID_card{public  string name;// 姓名public  string sex;// 性别public  string nation;// 民族public  string address;// 住址public  string IDnumber;// 身份证号码public  DateTime dateBirth;// 出生日期}

这是一张身份证上所要包含的信息,将身份证抽象为一个类命名为ID_card,类里面使用字段定义信息姓名、性别、民族、出生日期、住址、身份证号。这就创建了一个类。

2.什么是对象?

上述 “什么是类?”中创建了一张居民身份证,但是如何将身份证发放给个人比如这个人叫“流星”,这就需要为“流星”制作身份证卡片,于是这个世界多出了一张卡片。
在代码中如何实现

            ID_card card_202410161024=new ID_card();card_202410161024.name      = "流星";card_202410161024.sex       = "男";card_202410161024.nation    = "汉";card_202410161024.address   = "上海";card_202410161024.IDnumber = "3421234567832";card_202410161024.dateBirth = new DateTime(2000, 10, 17, 12, 30, 0);

创建一个对象是通过 new 关键字来实现的,通过上面的代码就将ID_card这个类实例化并产生了一个对象命名为card_202410161024。

3. 类与对象的区别

类定义的是一个“概念模型”,在这个模型中规定对象的“属性”和“方法”。对象是按照类这个模型创造出来的真实“实体”,每个属性都有特定的“值”。(属性的概念后面记录)

二、类的基本规范和对象使用

1. 类的规范

类的基本规范如下:

访问修饰符 class 类的名称
{// 字段部分字段 1 的类型 字段 1 名称字段 2 的类型 字段 2 名称
…// 属性部分属性 1 属性 2// 方法部分方法 1方法 2}

以上是类的标准规范,具体根据需要定义。

三、类的访问修饰符(简述)

1. 项目和程序集

简单点项目包括:控制台应用程序,Windows应用程序,类库(Class Library)等,而程序集叫Assembly(也就是我们创建项目中的AssemblyInfo.cs文件),
一个项目也就是一个程序集,介绍上面的目的为了说明,一个项目的internal无法在另一个项目中调用。
原文链接:https://blog.csdn.net/xiaolei1982/article/details/2257280

2. 类的访问修饰符public和internal

public:公共的
internal:内部的
在类的规范中 class 前可手动添加访问修饰符public或internal,若不添加默认为internal修饰。
在一个类定义和使用它的地方,如果都在一个程序集内,是可以不添加的 public 的,默认 internal 的意思就是程序集内部。如果定义和使用在
不同的程序集中,就必须添加。
在这里插入图片描述
在这里插入图片描述

如图所示在ConsoleApp1项目中有两个类文件分别是Class1.cs与Program.cs,这两个类文件属于同一个程序集,这两个类文件中的类,即使使用internal修饰也可以相互使用,因为他们本身就是在同一内部。

四、字段与属性

之前一直提到属性但从来没用过,字段和属性有着千丝万缕的联系,如果没有很好的理解字段那属性是无法讲解的。

1.字段

在面向对象的学习中会遇到两种变量一种是“局部变量”,一种是“成员变量”。
在这里插入图片描述

  • 局部变量,定义在方法内部,作用范围只限于方法内部。
  • 成员变量,也就是“字段”。字段是定义在类的内部,方法外面。它不属于某一个特定方法,而是供这个类内部所有的方法使用的。所以成员变量的作用范围是整个类的内部。
字段的修饰符public 和 private

类的修饰符有 public 和 internal,字段的修饰符是 public 和 private 两种,当没有添加任何修饰符的时候默认是 private。
private:私有的
后面实际开发中我们很少用 public修饰字段,因为字段设计的初衷是给类内部使用,而非外部使用。这里所说的外部使用,就是通过对象的方式去调用字段。如下图所示private所修饰的weight,无法通过对象调用。
在这里插入图片描述

2.属性
2.1属性的定义与发展史
2.1.1 .NET2.0时代

在一个类中定义一些属性

namespace ConsoleApp1
{class Class3{
// 属性1private int Str1 = 30;public int STR1{get{return Str1;}set{if (value>100){Str1 = 100;}if(value<0){Str1 = 0;}}}
// 属性2private string name = string.Empty;public string Name{get{return name;}set{name = value;}}
//属性3public double Weight{get{double weight = 99.99;return weight;}}}
}

get:获取
set:设置

2.1.2属性的结构

属性包括两部分,一部分是 get,用来获取属性的值,也就是我们在通过对象调用属性的时候,如果是读取属性值,这个 get 被调用。其实 get 的本质就是一个方法。另一部分是set,set 其实也是一个方法,我们给属性赋值的时候,这个方法被调用。除此以外呢,我们发现当读取或者赋值属性的时候,其实操作的是一个对应的私有字段,比如STR1属性,对应的是Str1 这个私有字段。当调用 get 的方法的时候是读取这个字段的值,当调用 set 方法的时候,我们所赋值的具体数据首先会到 value 这个“中间变量”中,然后通过 value传给对应的私有字段Str1 。

2.2.3 为什么用属性
  1. 属性轻松增加业务逻辑
    假设微信中的转账金额不能小于0,不能大于100。当为转账金额STR1赋值时,它自身就具有这个业务逻辑,消除了安全隐患。
  2. 只读属性轻松控制。
    上面的代码中Weight是一个只读属性,只需要将set删除就可以实现。get内部也可以增加相应的逻辑。
  3. 不得不用属性
    很多控件中只能调用和解析对象的属性,不能用字段。所以不得不用解析。
  4. 字段的作用
    出现属性这一概念后,字段的作用好像就是为解析服务的,字段起到服务于属性的作用。
    强调:属性一般都是 public 做修饰符,使用 private 是不合理的设计。
    字段一般都是 private 做修饰符,个别情况可以使用 public,但是很少。
2.1.4 .NET3.0时代

对于可读可写、没有任何业务逻辑的属性可以简化书写为如下格式:

        public string Name{get;set;}public double Weight{get;set;}

可以发现除了没有业务逻辑外,私有字段也消失了,所以数据保存到了哪里?
其实编译器自动帮我们生成了一个私有字段,只是不能被我们直接使用,其实我们也没有必要使用。
.NET3.0时代对于可读可写、没有任何业务逻辑的属性可以简化,但是其它的属性还需要遵从.NET2.0时代的格式。

2.1.5 .NET4.6时代

4.6 的时候我们可以只有一个 get,并且也可以直接添加业务逻辑,我们还可以直接给属性赋值。

        public string Name{get;set;} = "流星";public double Weight{get;} = 99.9;public double hi{get{double ti= 99.99;return hi;}set{}}
2.1.6 class类型的属性以及属性数组

在这里插入图片描述
进一步如何使用后面学习

相关文章:

C#学习笔记(九)

C#学习笔记&#xff08;九&#xff09; 第六章 面向对象编程&#xff08;一&#xff09;类与对象、字段与属性一、类与对象正确的理解1. 什么是类&#xff1f;2.什么是对象&#xff1f;3. 类与对象的区别 二、类的基本规范和对象使用1. 类的规范 三、类的访问修饰符&#xff08…...

意外发现!AI写作这样用,热点文章轻松超越同行90%!

做自媒体&#xff0c;写热点文章很重要。 热点自带流量&#xff0c;能很快吸引不少读者。 可很多自媒体新手很犯愁。 干货文还能勉强写出来&#xff0c;碰到热点文就不知咋办了。 为啥写热点文章这么难呢&#xff1f; 关键是得找个新颖角度切入。 要是只在网上反复复制粘贴那些…...

WPF常见容器全方位介绍

Windows Presentation Foundation (WPF) 是微软的一种用于构建Windows桌面应用程序的UI框架。WPF的布局系统基于容器&#xff0c;帮助开发者以灵活、响应的方式组织用户界面 (UI) 元素。本篇文章将详细介绍WPF中几种常见的容器&#xff0c;包括Grid、StackPanel、WrapPanel、Do…...

重置时把el-tree树节点选中状态取消

要重置 Element UI 的 el-tree 组件并取消所有节点的选中状态&#xff0c;可以通过以下几种方法&#xff1a; 使用 setCheckedKeys 方法&#xff1a; 如果你的树配置了 node-key 属性&#xff0c;可以使用 setCheckedKeys 方法来清空所有选中的节点。 this.$refs.tree.setCheck…...

服务器系统克隆技术

工作任务&#xff1a;克隆对象是Windows server2019 和2022的datacenter版本 条件&#xff1a;在已经完成安装的虚拟机上做克隆 图1-1 用两个服务器的母盘准备进行克隆 第一步&#xff1a;新建一个文件目录用于安放克隆好的服务器 图1-2 创建两个目录用于安放即将克隆好的服务…...

【Java】多线程 Start() 与 run() (简洁实操)

Java系列文章目录 补充内容 Windows通过SSH连接Linux 第一章 Linux基本命令的学习与Linux历史 文章目录 Java系列文章目录一、前言二、学习内容&#xff1a;三、问题描述start() 方法run() 方法 四、解决方案&#xff1a;4.1 重复调用 .run()4.2 重复调用 start()4.3 正常调用…...

基于微信小程序的购物系统【附源码、文档】

博主介绍&#xff1a;✌IT徐师兄、7年大厂程序员经历。全网粉丝15W、csdn博客专家、掘金/华为云//InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;&#x1f3…...

AI绘画:24最新Stable Diffusion 终极炼丹宝典:从入门到精通!

前言 我是咪咪酱&#xff0c;以浅显易懂的方式&#xff0c;与大家分享那些实实在在可行之宝藏。 历经耗时数十个小时&#xff0c;总算将这份Stable Diffusion的使用教程整理妥当。 从最初的安装与配置&#xff0c;细至界面功能的详解&#xff0c;再至实战案例的制作&#xf…...

线性可分支持向量机的原理推导【补充知识部分】拉格朗日函数 公式解析

本文是将文章《线性可分支持向量机的原理推导》中的公式单独拿出来做一个详细的解析&#xff0c;便于初学者更好的理解。在主文章中&#xff0c;有一个部分是关于补充拉格朗日对偶性的相关知识&#xff0c;此公式即为这部分内容。 公式 9-9 是关于拉格朗日函数 L ( x , α , β…...

csdn(最新交流群)

SEOI Chathttps://seoi.net/room/10122?kwe7cp45v此网站开放性较强&#xff0c;小心诈骗...

新手maven入门学习教程

MAVEN基础入门 提示&#xff1a;java新人的学习之路记录 学习内容&#xff1a; 提示&#xff1a;了解并会初步使用maven构建管理java项目 Maven 是一个非常流行的 Java 项目管理和构建工具。它通过提供一套标准的构建生命周期和一组预定义的目标来简化 Java 应用程序的构建过…...

React 中级阶段学习计划

React 中级阶段学习计划 目标 掌握状态管理和路由。能够调用API并处理异步数据。学会使用CSS-in-JS和CSS Modules进行样式处理。 学习内容 状态管理 React Context API Context API&#xff1a;用于在组件树中传递数据&#xff0c;避免多层props传递。示例&#xff1a;im…...

[产品管理-47]:产品市场调研 - 一级市场、二级市场、次级市场?

目录 一、产品销售环节的一级二级市场 1、一级市场 2、二级市场 3、一级市场与二级市场的互动关系 二、金融中的一级二级市场 1、一级市场&#xff08;Primary Market&#xff09;- 新股发行、定向发行 2、二级市场&#xff08;Secondary Market&#xff09;- 普通投资者…...

Linux零基础教程学习(黑马)

1.初识Linux 1.2远程连接Linux系统 图形化、命令行 对于操作系统的使用&#xff0c;有2种使用形式&#xff1a; 图形化页面使用操作系统 以命令的形式使用操作系统 不论是Windows还是Linux亦或是MacOS系统&#xff0c;都是支持这两种使用形式。 图形化&#xff1a;使用操作…...

一款零依赖、跨平台的流媒体协议处理工具,支持 RTSP、WebRTC、RTMP 等视频流协议的处理

大家好&#xff0c;今天给大家分享一款功能强大的流媒体协议处理工具go2rtc&#xff0c;支持多种协议和操作系统&#xff0c;具有零依赖、零配置、低延迟等特点。 项目介绍 go2rtc可以从各种来源获取流&#xff0c;包括 RTSP、WebRTC、HomeKit、FFmpeg、RTMP 等&#xff0c;并…...

PHP 正则验证A-Z且排除某字母

都已经找到这里来了&#xff0c;相信已经尝试很多办法了&#xff0c;那么我们直接上答案 关键正则&#xff1a;(?!.*[IO]) //验证5到6个大写字母且排除I和O if (preg_match(/^(?!.*[IO])[A-Z\d]{5,6}$/u, AAAAM)) {echo "匹配成功"; } else {echo "匹配失败…...

如何安全运行别人上传的Python代码?

写后端的同学&#xff0c;有时候需要在网站上实现一个功能&#xff0c;让用户上传或者编写自己的Python代码。后端再运行这些代码。 涉及到用户自己上传代码&#xff0c;我们第一个想到的问题&#xff0c;就是如何避免用户编写危险命令。如果用户的代码里面涉及到下面两行&…...

matlab相位图

% 清空工作空间和命令窗口 clear; clc; % 模拟生成时间t&#xff0c;位移y(t)和角位移theta(t) t linspace(0, 100, 1000); % 时间从0到100&#xff0c;包含1000个点 y 1e-5 * sin(2 * pi * 0.1 * t) .* exp(-0.01 * t); % 位移y(t) 振荡衰减 theta 1e-6 * cos(2 * pi * …...

C语言笔记(指针的进阶)

目录 1.字符指针 2.指针数组 3.数组指针 3.1.创建数组指针 3.2.&数组名和数组名 1.字符指针 int main() { char ch w;char* pc &ch;const char *p "abcdef";//常量字符串 产生的值就是首元素的地址//常量字符串不能被修改 因此需要加上一个…...

NodeJS连接MySQL 8.4报错:code: ‘ER_TABLEACCESS_DENIED_ERROR‘

NodeJS连接MySQL 8.4报错&#xff1a;code: ER_TABLEACCESS_DENIED_ERROR { code: ER_TABLEACCESS_DENIED_ERROR, errno: 1142, sqlMessage: "SELECT command denied to user 用户名localhost for table 表名", sqlState: 42000, index: 0, sql: SELECT …...

Lombok 的 @Data 注解失效,未生成 getter/setter 方法引发的HTTP 406 错误

HTTP 状态码 406 (Not Acceptable) 和 500 (Internal Server Error) 是两类完全不同的错误&#xff0c;它们的含义、原因和解决方法都有显著区别。以下是详细对比&#xff1a; 1. HTTP 406 (Not Acceptable) 含义&#xff1a; 客户端请求的内容类型与服务器支持的内容类型不匹…...

.Net框架,除了EF还有很多很多......

文章目录 1. 引言2. Dapper2.1 概述与设计原理2.2 核心功能与代码示例基本查询多映射查询存储过程调用 2.3 性能优化原理2.4 适用场景 3. NHibernate3.1 概述与架构设计3.2 映射配置示例Fluent映射XML映射 3.3 查询示例HQL查询Criteria APILINQ提供程序 3.4 高级特性3.5 适用场…...

剑指offer20_链表中环的入口节点

链表中环的入口节点 给定一个链表&#xff0c;若其中包含环&#xff0c;则输出环的入口节点。 若其中不包含环&#xff0c;则输出null。 数据范围 节点 val 值取值范围 [ 1 , 1000 ] [1,1000] [1,1000]。 节点 val 值各不相同。 链表长度 [ 0 , 500 ] [0,500] [0,500]。 …...

dify打造数据可视化图表

一、概述 在日常工作和学习中&#xff0c;我们经常需要和数据打交道。无论是分析报告、项目展示&#xff0c;还是简单的数据洞察&#xff0c;一个清晰直观的图表&#xff0c;往往能胜过千言万语。 一款能让数据可视化变得超级简单的 MCP Server&#xff0c;由蚂蚁集团 AntV 团队…...

Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决

Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决 问题背景 在一个基于 Spring Cloud Gateway WebFlux 构建的微服务项目中&#xff0c;新增了一个本地验证码接口 /code&#xff0c;使用函数式路由&#xff08;RouterFunction&#xff09;和 Hutool 的 Circle…...

LangChain知识库管理后端接口:数据库操作详解—— 构建本地知识库系统的基础《二》

这段 Python 代码是一个完整的 知识库数据库操作模块&#xff0c;用于对本地知识库系统中的知识库进行增删改查&#xff08;CRUD&#xff09;操作。它基于 SQLAlchemy ORM 框架 和一个自定义的装饰器 with_session 实现数据库会话管理。 &#x1f4d8; 一、整体功能概述 该模块…...

[免费]微信小程序问卷调查系统(SpringBoot后端+Vue管理端)【论文+源码+SQL脚本】

大家好&#xff0c;我是java1234_小锋老师&#xff0c;看到一个不错的微信小程序问卷调查系统(SpringBoot后端Vue管理端)【论文源码SQL脚本】&#xff0c;分享下哈。 项目视频演示 【免费】微信小程序问卷调查系统(SpringBoot后端Vue管理端) Java毕业设计_哔哩哔哩_bilibili 项…...

三分算法与DeepSeek辅助证明是单峰函数

前置 单峰函数有唯一的最大值&#xff0c;最大值左侧的数值严格单调递增&#xff0c;最大值右侧的数值严格单调递减。 单谷函数有唯一的最小值&#xff0c;最小值左侧的数值严格单调递减&#xff0c;最小值右侧的数值严格单调递增。 三分的本质 三分和二分一样都是通过不断缩…...

【MATLAB代码】基于最大相关熵准则(MCC)的三维鲁棒卡尔曼滤波算法(MCC-KF),附源代码|订阅专栏后可直接查看

文章所述的代码实现了基于最大相关熵准则(MCC)的三维鲁棒卡尔曼滤波算法(MCC-KF),针对传感器观测数据中存在的脉冲型异常噪声问题,通过非线性加权机制提升滤波器的抗干扰能力。代码通过对比传统KF与MCC-KF在含异常值场景下的表现,验证了后者在状态估计鲁棒性方面的显著优…...

永磁同步电机无速度算法--基于卡尔曼滤波器的滑模观测器

一、原理介绍 传统滑模观测器采用如下结构&#xff1a; 传统SMO中LPF会带来相位延迟和幅值衰减&#xff0c;并且需要额外的相位补偿。 采用扩展卡尔曼滤波器代替常用低通滤波器(LPF)&#xff0c;可以去除高次谐波&#xff0c;并且不用相位补偿就可以获得一个误差较小的转子位…...