C#基础——类、构造函数和静态成员

类是一个数据类型的蓝图。构成类的方法和变量称为类的成员,对象是类的实例。类的定义规定了类的对象由什么组成及在这个对象上可执行什么操作。

class 类名

{

        (访问属性) 成员变量; 

        (访问属性) 成员函数;

}

访问属性:public(公有的,类中可以直接访问) ,protected受保护的  , private私有的(默认的)(私有的,其他的类中不可以直接访问) 

如下类的示例,描述Box的信息(属性(成员变量)和Box的方法(函数)) 

    class Box{public int row = 0;public int col = 0;public int rowBk = 0;public int colBk = 0;//备份public void Backup(){rowBk = row;colBk = col;}//返回备份public void Revert(){row = rowBk;col = colBk;}}

类的使用

 在使用类的成员变量或者函数时,要先检查是否在同一个命名空间下,如果不是需要在开头使用

using + 类所在的命名空间名字

需要先创建一个对象。然后通过对象使用类里面的变量或者方法。

类名 对象名 = new 类名();        //创建对象

对象名.成员变量;                       //引用对象

        static void Main(string[] args){Box Box = new Box();        // 声明 Box1,类型为 BoxBox.row = 5;Box.col = 6;Box.Backup();Console.WriteLine(Box.row + " " + Box.col);Console.WriteLine(Box.rowBk + " " + Box.colBk);Box.row = 10;Box.col = 12;Console.WriteLine(Box.row + " " + Box.col);Console.WriteLine(Box.rowBk + " " + Box.colBk);Box.Revert();Console.WriteLine(Box.row + " " + Box.col);Console.ReadKey();}

构造函数

默认构造函数

new一个对象时,会自动调用构造函数,一般用于初始化操作。如果没有写构造函数,系统会给一个默认的空的构造函数,我们可以在默认构造函数里面对成员变量进行赋初始值。

传参构造函数

当在需要创建新的不同的对象的时候,就需要使用传参构造函数。

    class Box{public int row = 0;public int col = 0;public int rowBk = 0;public int colBk = 0;//默认构造函数/*public Box(){}*/public Box(){int row = 0;int col = 0;int rowBk = 0;int colBk = 0;}//传参构造函数public Box(int inRow,int inCol) { row = inRow;col = inCol;rowBk = inRow;colBk = inCol;}}
        static void Main(string[] args){Box Box1 = new Box(5, 6);        // 声明 Box1,类型为 BoxBox Box2 = new Box(10, 12);        // 声明 Box2,类型为 BoxConsole.WriteLine(Box1.row + " " + Box1.col);Console.WriteLine(Box2.row + " " + Box2.col);Console.ReadKey();}

静态成员

使用 static 关键字把类成员定义为静态的。当我们声明一个类成员为静态时,意味着无论有多少个类的对象被创建,只会有一个该静态成员的副本,它们的值可以通过直接调用类而不需要创建类的实例来获取。关键字 static 意味着类中只有一个该成员的实例。

    class Test{public int Num1 = 0;public static int Num2 = 0;}internal class Program{static void Main(){Test num1 = new Test();num1.Num1++;//num1.Num2++;    //报错}}

静态成员与普通成员的区别

接下来将对这两种成员进行加1操作,看看他们之间的区别。

以上示例中发现,静态成员不能通过实例化后使用,所以,可以在类中创建相应的接口或者方法(函数)来获取和修改静态成员。还可以直接使用 类名.静态成员 进行调用。

        public void count(){num2++;}public int getNum(){return num2;}
            Test.Num2++;      //正确写法

直接让两者加1是看不出区别的,所以,再实例化一个对象出来,在执行加1的操作就可以看出两者的区别了。

    class Test{public int Num1 = 0;public static int Num2 = 0;public void count(){Num2++;}public int getNum(){return Num2;}}internal class Program{static void Main(){Test num1 = new Test();Test num2 = new Test();//普通成员num1.Num1++;num2.Num1++;Console.WriteLine(num1.Num1);Console.WriteLine(num2.Num1);//静态成员//通过方法使用静态成员num1.count();num2.count();Console.WriteLine(num1.getNum());Console.WriteLine(num2.getNum());//通过 类名.静态成员 使用Test.Num2++;Console.WriteLine(Test.Num2);Console.ReadKey();}}

从运行结果中,我们可以看出 Num2 的结果是2,这就意味着,创建的第二个对象没有像普通成员那样重新获取了一次 Num1 的值 ,而是直接获取了被改变了值以后的 Num2。这说明静态成员在对象创建之前就已经存在,后面的操作都是直接对同一数据进行修改,而非修改不同的数据。

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

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

相关文章

33.【C语言】实践扫雷游戏

预备知识: 第13篇 一维数组 第13.5篇 二维数组 第28篇 库函数 第29篇 自定义函数 第30篇 函数补充 0x1游戏的运行: 1.随机布置雷 2.排雷 基本规则: 点开一个格子后,显示1,对于9*9,代表以1为中心的去…

SpringBoot连接Redis

SpringBoot连接Redis 一、前言1. 添加 Redis 相关依赖2. 配置 Redis 连接信息3. 使用 RedisTemplate 进行操作4. 使用 RedisRepository 进行操作(可选)5. 启动应用程序6. 测试 一、前言 连接 Redis 到 Spring Boot 可以通过以下步骤完成: 1…

【五】架构设计之思考路线

架构设计之思考路线 概述 看过不少本架构设计方面的书籍,如《亿级流量网站架构核心技术》《超大流量分布式系统架构解决方案》《企业IT架构转型之道》《从程序员到架构师》等,看完之后最终发现架构设计思维大同小异,无非都是围绕实现三高&…

【总结】前端JQuery获取Java后端文件流实现常规附件预览功能

前端JQuery获取Java后端文件流实现常规附件预览功能 项目背景1. Java后端处理附件1.1 将word文档转换为pdf格式1.2 将文件流返回前端 2. 前端处理附件预览(JQuery)2.1 预览pdf文件2.2 预览ofd文件2.3 预览图片、txt文档 共勉。 项目背景 目前维护的项目…

学习Java的日子 Day56 数据库连接池,Druid连接池

Day56 1.数据库连接池 理解:池就是容器,容器中存放了多个连接对象 使用原因: 1.优化创建和销毁连接的时间(在项目启动时创建连接池,项目销毁时关闭连接池) 2.提高连接对象的复用率 3.有效控制项目中连接的…

Windows下Pytorch入门深度学习环境安装与配置(CPU版本)

Windows下Pytorch入门深度学习环境安装与配置(CPU版本) 一、安装过程中各个软件的作用(一)Python(二)库 / 包 / package / library(三)PyTorch / Tensorflow(四&#xff…

Java之开发 系统设计 分布式 高性能 高可用

1、restful api 基于rest构建的api 规范: post delete put get 增删改查路径 接口命名 过滤信息状态码 2、软件开发流程 3、命名规范 类名:大驼峰方法名:小驼峰成员变量、局部变量:小驼峰测试方法名:蛇形命名 下划…

【Sass】常用全局sass高级函数,可使用原子化CSS减轻代码量,方便快速开发

文章目录 前言一、安装二、样式custom.scssflex.scsscolor.scssmargin-padding.scssorther 总结 前言 提示:这里可以添加本文要记录的大概内容: 针对style的预编译器为scss 转载自git前端知识库 原博主是B站up程序员郑清,可以看他的v3教程…

【云原生】Docker搭建知识库文档协作平台Confluence

目录 一、前言 二、企业级知识库文档工具部署形式 2.1 开源工具平台 2.1.1 开源工具优点 2.1.2 开源工具缺点 2.2 私有化部署 2.3 混合部署 三、如何选择合适的知识库平台工具 3.1 明确目标和需求 3.2 选择合适的知识库平台工具 四、Confluence介绍 4.2 confluence特…

平面点云三角化边数与点的关系

欢迎关注更多精彩 关注我,学习常用算法与数据结构,一题多解,降维打击。 点云三角化定义 原文 说人话: 一个二维平面点集P三角化结果是一个满足以下条件的三角形集合: 1 所有三角形的并集刚好是P的凸包。 2 所有三角…

python3GUI--new音乐播放器!By:PyQt5(附下载地址)

文章目录 一.前言二.展示1.启动2.MV推荐3.专辑详情页4.歌手详情页5.搜索结果页6.歌曲播放页7.我喜欢歌曲页8.我喜欢专辑页 三.思路&启发1.布局2.细节3.组件复用4.项目结构5.优化速度1.Nuitka1.显著提高性能:2.减小程序体积&am…

Java集合框架2024最通俗易懂(图片超全)

集合 1.1、定义 集合就是类型统一的数据组合而成的数据结构,该数据结构可以任意的改变长度。 1.3、Set Set数据存储结构,无序,且不可以重复,元素可以为null,但是也只能出现一次,如下图: 1.3.1、HashSe…

WEB渗透Web突破篇-SQL注入(Oracle)

版本 SELECT user FROM dual UNION SELECT * FROM v$version数据库名 SELECT global_name FROM global_name; SELECT name FROM V$DATABASE; SELECT instance_name FROM V$INSTANCE; SELECT SYS.DATABASE_NAME FROM DUAL;列库 SELECT DISTINCT owner FROM all_tables;列表 …

rag输出了幻觉怎么办

首先,幻觉也分类型。 一个是事实性幻觉,就是LLM凭借自身能力回答问题,但是这个回答是编的,也可能有正确答案但是LLM输出错了。总之这是LLM自身原因。 另一个是忠实性幻觉,就是你要求LLM根据你给的材料给出答案&#xf…

Scikit-learn提供了哪些机器学习算法以及如何使用Scikit-learn进行模型训练和评估

Scikit-learn库的使用 一、Scikit-learn提供的机器学习算法 Scikit-learn(通常简称为sklearn)是一个广泛使用的Python机器学习库,它提供了多种用于数据挖掘和数据分析的算法。Scikit-learn支持的机器学习算法可以大致分为以下几类&#xff…

[240726] Mistral AI 发布新一代旗舰模型 | Node.js 合并 TypeScript 文件执行提案

目录 Mistral AI 发布新一代旗舰模型:Mistral Large 2Node.js 合并 TypeScript 文件执行提案:--experimental-strip-types Mistral AI 发布新一代旗舰模型:Mistral Large 2 Mistral AI 宣布推出新一代旗舰模型 Mistral Large 2,该…

算法-----递归~~搜索~~回溯(宏观认识)

目录 1.什么是递归 1.1二叉树的遍历 1.2快速排序 1.3归并排序 2.为什么会用到递归 3.如何理解递归 4.如何写好一个递归 5.什么是搜索 5.1深度(dfs)优先遍历&优先搜索 5.2宽度(bfs)优先遍历&优先搜索 6.回溯 1.什…

Temu测评自养号如何做?三分钟带你入门!

环境系统 现在市场上很多的系统都是现成的或软件包,没有解决风控的能力,如果有需要建议大家自己学习一套技术,把技术掌握在自己手里,这样不会有依赖性 手机端环境:越狱后的ios指定版本手机可以一键新机的系统(参数调试)独享的家…

梧桐数据库:子查询优化技术

在数据库技术中,子查询是一个强大的工具,但不加优化的子查询可能会导致性能问题。优化子查询可以显著提升查询效率。以下是一些常见的子查询优化技术: 1. 使用连接(JOIN)替代子查询 1.1 基本原理 很多情况下&#x…

【NLP自然语言处理】为什么说BERT是bidirectional

首先,来看一下Transformer架构图: 我们知道,Bert设计时主要采用的是Transformer编码器部分,要论述Bert为啥是双向的,我想从编码器和解码器的注意力机制来阐述。 在看这篇博客前,需要对Transformer有一定的…