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类型的属性以及属性数组

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/453897.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Jsoup在Java中:解析京东网站数据

对于电商网站如京东来说&#xff0c;其页面上的数据包含了丰富的商业洞察。对于开发者而言&#xff0c;能够从这些网站中提取有价值的信息&#xff0c;进行分析和应用&#xff0c;无疑是一项重要的技能。本文将介绍如何使用Java中的Jsoup库来解析京东网站的数据。 Jsoup简介 …

开源表单生成器OpnForm

什么是 OpnForm &#xff1f; OpnForm 是一个开源的表单构建工具&#xff0c;旨在简化创建自定义表单的过程&#xff0c;特别适合无编码知识的用户。它通过人工智能优化表单创建流程&#xff0c;支持多种用途&#xff0c;如联系人表单、调查表等。OpnForm 提供了一个直观的拖放…

Oracle Form开发遇到的一些问题

1.错误&#xff1a;FRM-32083: Value length is too long for maximum length of item. 解决&#xff1a;Maximum Length要设置的大些。 2.问题&#xff1a;FRM-30047: Cannot resolve item reference RATEPAYER_INFO.PARTY_SITE_ID. 解决&#xff1a;该引用使用错误&#xff…

图片写入GPS经纬高信息

近期项目中需要往java平台传输图片&#xff0c;直接使用QNetworkAccessManager和QHttpMultipart类即可&#xff0c;其他博文中有分享。 主要是平台接口对所传输图片有要求&#xff1a;需要包含GPS信息&#xff08;经度、纬度、高度&#xff09;。 Qt无法直接实现&#xff0c;…

优先级队列(2)_数据流中第k大元素

个人主页&#xff1a;C忠实粉丝 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 C忠实粉丝 原创 优先级队列(2)_数据流中第k大元素 收录于专栏【经典算法练习】 本专栏旨在分享学习算法的一点学习笔记&#xff0c;欢迎大家在评论区交流讨论&#x1f48c; 目…

深度解析机器学习的四大核心功能:分类、回归、聚类与降维

深度解析机器学习的四大核心功能&#xff1a;分类、回归、聚类与降维 前言分类&#xff08;Classification&#xff09;&#xff1a;预测离散标签的艺术关键算法与代码示例逻辑回归支持向量机&#xff08;SVM&#xff09; 回归&#xff08;Regression&#xff09;&#xff1a;预…

信息学奥赛复赛复习18-CSP-J2022-01解密-二分答案、二分找边界、二分时间复杂度、二分求最小

PDF文档回复:20241017 1 P8814 [CSP-J 2022] 解密 [题目描述] 给定一个正整数 k&#xff0c;有 k 次询问&#xff0c;每次给定三个正整数 ni,ei,di&#xff0c;求两个正整数 pi,qi&#xff0c;使 nipiqi、eidi(pi−1)(qi−1)1 [输入格式] 第一行一个正整数 k&#xff0c;表…

Docker 入门 - 拉取/创建镜像 + 运行和管理容器

写在前面&#xff1a; 本篇简单介绍一下如何入手 Docker&#xff0c;从 创建/拉取 镜像&#xff0c;再到运行和管理容器&#xff0c;还包括导出容器等操作。这里先贴一下官方的文档地址&#xff1a; Docker DocsDocker Documentation is the official Docker library of reso…

在Windows系统中,cmd 查看 MongoDB 相关信息

MongoDB是一种流行的NoSQL数据库&#xff0c;广泛应用于各种现代应用程序中。 1 查看MongoDB的版本号 要查看MongoDB的版本号&#xff0c;可以使用mongo命令连接到MongoDB&#xff0c;然后执行db.version()。 mongo连接到数据库后&#xff0c;执行以下命令&#xff0c;输出M…

java如何部署web后端服务

java如何部署web后端服务 简单记录一下&#xff0c;方便后续使用。 部署流程 1.web打包 2.关掉需要升级的运行中的服务 /microservice/hedgingcustomer-0.0.1-SNAPSHOT/conf/bin/ 执行脚本 sh shutdown.sh 3.解压文件 返回到/microservice 将升级包上传到该路径&#x…

10款超好用的文档加密软件|2024企业常用文档加密软件排行榜!

在当今的数字化时代&#xff0c;企业的数据安全已经成为了一项至关重要的任务。为了确保企业核心信息资产的安全性和完整性&#xff0c;越来越多的企业开始采用文档加密软件。以下是2024年企业常用的10款超好用的文档加密软件排行榜。 1. Ping32文档加密软件 Ping32是一款功能…

重磅发布,Wireshark 4.4.1 修复多个漏洞,性能新升级

号主&#xff1a;老杨丨11年资深网络工程师&#xff0c;更多网工提升干货&#xff0c;请关注公众号&#xff1a;网络工程师俱乐部 中午好&#xff0c;我的网工朋友 Wireshark 一直以其强大的数据包捕获和分析功能而闻名。作为网络工程师、安全分析师和开发者的重要工具&#x…

Java项目-基于spingboot框架的校友社交系统系统项目实战(附源码+文档)

作者&#xff1a;计算机学长阿伟 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、ElementUI等&#xff0c;“文末源码”。 开发运行环境 开发语言&#xff1a;Java数据库&#xff1a;MySQL技术&#xff1a;SpringBoot、Vue、Mybaits Plus、ELementUI工具&#xff1a;IDEA/…

中石化万总经理一行莅临点赋科技公司考察调研

近日&#xff0c;中石化万总经理一行莅临点赋科技公司&#xff0c;进行了坦诚而富有成效的交流&#xff0c;双方在轻松而又热烈的氛围中&#xff0c;逐步达成了初步合作意向。 在参观过程中&#xff0c;点赋科技董事长崔梦姣详细介绍了公司的发展历程、核心技术以及未来的发展规…

IDEA下lombok安装及找不到get,set的问题的解决方法

在IDEA中使用Lombok,但是在编译时&#xff0c;提示找不到set()和get()方法&#xff0c;明明在javabean中使用了Data注解&#xff0c;但是编译器就是找不到。 Idea下安装Lombok(需要二步) 第一步&#xff1a; pom.xml中加入lombok依赖包 1 2 3 4 5 6 7 <!-- https://mvnre…

【真题笔记】09-12年系统架构设计师要点总结

【真题笔记】09-12年系统架构设计师要点总结 41 视图DSSA&#xff08;特定领域架构&#xff09;集成系统数据库管理设计模式操作符运算符综合布线备份数据库集成工作流技术软件质量保证需求管理需求开发结构化方法企业战略数据模型事务数据库主题数据库系统设计原型开发静态分析…

SAP B1 账套锁定解决方案

背景 忘记账套密码时&#xff0c;随着尝试密码失败的次数变多&#xff0c;可能会出现账套锁定并报错的情况&#xff0c;如下图&#xff1a; 本文给出一个解决方案&#xff0c;供参考。 解决方案 效果&#xff1a;无法直接找回密码&#xff0c;或重置密码&#xff0c;但是可以…

代码随想录-环形链表II

题目与解析 题目链接:环形链表II 本题两个关键点&#xff0c;1、确定有环 2、确定环的入口位置 提供两种解法&#xff0c;第一种是我借助了一个辅助的列表来记录指针&#xff0c;空间复杂度O(n)比较无脑 第二种是Carl哥的双指针法&#xff0c;又是套圈问题&#xff0c;…

「毅硕|生信教程」 micromamba:mamba的C++实现,超越conda

1 Micromamba 简介 大家是否有这样的经历&#xff0c;使用conda/anaconda进行环境配置的是否速度非常慢&#xff0c;进度经常卡在“Collecting package metadata”上。甚至有时候需要安装的软件比较多&#xff0c;或者需要用到conda-forge这个最大的channel&#xff0c;conda能…

Windows环境下Qt Creator调试模式下qDebug输出中文乱码问题

尝试修改系统的区域设置的方法&#xff1a; 可以修复问题。但会出现其它问题&#xff1a; 比如某些软件打不开&#xff0c;或者一些软件界面的中文显示乱码&#xff01; 暂时没有找到其它更好的办法。