c#快速入门(2)

news2025/4/18 14:51:50

在这里插入图片描述

欢迎来到Cefler的博客😁
🕌博客主页:那个传说中的man的主页
🏠个人专栏:题目解析
🌎推荐文章:题目大解析2

在这里插入图片描述


目录

  • 👉🏻类、对象、类成员简介
  • 👉🏻语句详解
    • foreach语句
    • checked和unchecked语句
  • 👉🏻字段、属性、索引器、常量
    • ⭐️字段
    • 只读字段(readonly)
    • ⭐️ 属性
    • 属性声明
    • 实时动态计算
    • 静态属性和实例属性
    • 属性与字段的关系

👉🏻类、对象、类成员简介

对象也叫实例,是类经过实例化后得到的内存中的实体
依照类,我们可以创建对象,这就是实例化
而使用new操作符我们就可以创建类的实例

类的三大成员🚗
1.属性:存储数据,组合起来表示类或对象当前的状态
2.方法:由C语言中的函数进化而来,表示类或对象能做什么
3.事件:类或对象通知其它类或对象的机制,为c#所持有
重在属性的类:Entity Framework
重在方法的类:Math,Console
重在事件的类:Timer

静态成员和实例成员🚗
1.静态成员:在语义上表示它是类的成员
2.实例成员(非静态):语义上表示它是对象的成员
通俗来说,实例成员必须new出一个实例才存在,而静态成员无需new即可访问
在这里插入图片描述
c# 派生谱系
在这里插入图片描述

👉🏻语句详解

foreach语句

语法:

foreach(数据类型 变量名 in 数组名)
{
//语句块;
}

foreach 循环用于列举出集合中所有的元素,foreach 语句中的表达式由关键字 in 隔开的两个项组成。

in 右边的项是集合名,in 左边的项是变量名,用来存放该集合中的每个元素。

该循环的运行过程如下:每一次循环时,从集合中取出一个新的元素值。放到只读变量中去,如果括号中的整个表达式返回值为 true,foreach 块中的语句就能够执行。

一旦集合中的元素都已经被访问到,整个表达式的值为 false,控制流程就转入到 foreach 块后面的执行语句。

这里变量名的数据类型必须与数组的数据类型相兼容。

在 foreach 循环中,如果要输出数组中的元素,不需要使用数组中的下标,直接输出变量名即可。

foreach 语句仅能用于数组字符串集合类数据类型。

static void Main()
        {
            int[] arr = new int[5] { 1, 2, 3, 4, 5 };
            foreach(int input in arr)
            {
                Console.WriteLine(input);
            }
        }

在这里插入图片描述

checked和unchecked语句

checked 和 unchecked 语句指定整型类型算术运算转换的溢出检查上下文。 当发生整数算术溢出时,溢出检查上下文将定义发生的情况。 在已检查的上下文中,引发 System.OverflowException;如果在常数表达式中发生溢出,则会发生编译时错误。 在未检查的上下文中,会通过丢弃任何不适应目标类型的高序位来将操作结果截断。 例如,在加法示例中,它将从最大值包装到最小值。
详见:checked 和 unchecked 语句

👉🏻字段、属性、索引器、常量

⭐️字段

什么是字段?

  • 字段(field)是一种表示与对象或类型(结构体与类)关联的变量
  • 字段是类型的成员,旧称“成员变量”
  • 与对象相关联的叫“实例字段”
  • 与类型关联的字段称为“静态字段”,被static修饰

字段属于类,写在类里,语句写在函数里

class Fun
    {
        public int a;
        public static int  b;//静态成员
    }

字段的声明

  • 尽管字段声明带有封号,但它不是语句
  • 字段的名字一定是名词

字段的初始值

  • 无显示初始化时,字段获得其类型的默认值,所以字段“永远都不会被未初始化
  • 实例字段初始化时的时机——对象创建时
  • 静态字段初始化的时机——类型被加载时

只读字段

  • 实例只读字段
  • 静态只读字段

静态字段/函数(被static修饰),实例对象无法访问到,要想访问到,只能通过类名.字段名/函数名才行
非静态字段/函数,实例对象可以访问到

📗在构造函数或非静态函数中引用当前类的非静态字段要用this关键字,若是静态则就是类名.静态字段名

 public int score;//非静态字段
        public static int amount;//静态字段
        public Student()//创建一个构造函数
        {
            Student.amount++;
            this.score++;
        }

这里总而言之:

类名能够访问的:静态字段/函数
实例对象能够访问的:非静态字段/函数

✏️用静态字段打印0~10

   class Class1
    {
        static void Main()
        {
         

            for (int i = 0; i < 10; i++)
            {
                Student stu = new Student();//实例化对象,每次实例化都会调用Student中的构造函数
            }
            Student.PrintAmount();
        }
    }
    class Student
    {
        public static int amount;
        public Student()//创建一个构造函数
        {
            Student.amount++;
        }
        public static void PrintAmount()
        {
            Console.WriteLine(Student.amount);
        }
    }

实例构造和静态构造的区别
无非就是构造函数的public和static的区别,但主要区别在于,实例构造每次调用类该构造函数都会被调用一次,但静态构造只被调用一次后就不会再被调用了,所以静态构造适合初始化一些数据,并且希望后期不会修改

只读字段(readonly)

修饰词readonly :当被其修饰后,字段只能被修改一次(即初始化),且只能在类中或构造函数中初始化
若在外界中初始化会报错。
在这里插入图片描述

⭐️ 属性

什么是属性?

  • 属性(propety):是一种用于访问对象或类型的特征的成员,特征反映了状态
  • 属性是字段的自然扩展
    • 从命名上看,field更偏向于实例对象在内存当中的布局,而propety偏向于反映现实世界对象的特征
    • 对外:暴露数据,数据可以是存储在字段里的,也可以是动态计算出来的
    • 对内:保护字段不被非法值"污染"
  • 属性是由Get/Set方法对进化而来
  • 属性也是个语法糖:只是隐藏在背后

MyGet/Set👇🏻

 class Class1
    {
        static void Main()
        {

            Student stu1 = new Student();
            stu1.SetAge(95);
            int s1 = stu1.GetAge();
            stu1.SetAge(98);
            int s2 = stu1.GetAge();
            stu1.SetAge(200);//这里肯定会异常
            int s3 = stu1.GetAge();
            Console.WriteLine("{0},{1},{2}", s1, s2, s3);

        }
        class Student
        {
            private int age;//private即私有化,只能在当前类中使用

            public int GetAge()
            {
                return this.age;
            }
            public void SetAge(int val)
            {
                if(val>0&&val<124)
                {
                    this.age = val;
                }
                else
                {
                    throw new Exception("GetAge fail,val err");//抛出异常
                }
            }
        }

    }

尝试用异常捕获优化上述代码

  try
            {
                Student stu1 = new Student();
                stu1.SetAge(95);
                int s1 = stu1.GetAge();
                stu1.SetAge(98);
                int s2 = stu1.GetAge();
                stu1.SetAge(200);//这里肯定会异常
                int s3 = stu1.GetAge();
                Console.WriteLine("{0},{1},{2}", s1, s2, s3);
            }
            catch(Exception e)
            {
                Console.WriteLine(e.Message);
            }

使用private修饰时,命名的规范一般是首写字母为小写。

官方的Get/Set👇🏻

  class Class1
    {
        static void Main()
        {
            try
            {
                Student stu = new Student();
                stu.nald = 85;
                int s1 = stu.nald;
                Console.WriteLine(s1);

            }
            catch(Exception e)
            {
                Console.WriteLine(e.Message);
            }
          

        }
        class Student
        {
            private int age;//private即私有化,只能在当前类中使用
            public int nald//属性,属性名随便改
            {
                get
                {
                    return this.age;
                }
                set
                {
                    if(value>=0&&value<=124)//value为特定的上下文关键字
                    {
                        this.age = value;
                    }
                    else
                    {
                        throw new Exception("age err");
                    }
                }
            }

        }
    }

属性声明

权限 特性 数据类型 属性名
{get;set;
}

如果没有set,该属性就只能读不能改
属性快速声明
1.vs软件内输 prop 连按2下tab键

public int MyProperty { get; set; }
  1. propfull 连按2下tab键
private int myVar;
 
        public int MyProperty
        {
            get { return myVar; }
            set { myVar = value; }
        }

3.ctrl+r+e:自动封装字段
在这里插入图片描述

实时动态计算

  class Class1
    {
        static void Main()
        {
            Student stu = new Student();
            stu.Age = 24;
            Console.WriteLine(stu.CanWork);
        }
        class Student
        {
            private int age;

            public int Age
            {
                get { return age; }
                set { age = value; }
            }

            private bool canwork;

            public bool  CanWork//实时动态计算
            {   
                //get { return canwork; }
               get
                { 
                    if(this.age>=0&&this.age<=124)
                    {
                        return true;
                    }
                    else
                    {
                        return false;
                    }
                
                
                }
            }

        }

        
    }

在这里插入图片描述

静态属性和实例属性

也就是public和static的区别,静态属性反映当前类的状态,实例属性反映创建的实例对象的状态

属性与字段的关系

  • 一般来说,它们都用于表示实体(对象或类)的状态
  • 属性大多数情况下是字段的包装器(wrapper)
  • 建议:永远使用属性(而不是字段)来暴露数据。即字段永远private或protected

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

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

相关文章

chatgpt赋能python:Python的不断循环:了解你需要知道的

Python的不断循环&#xff1a;了解你需要知道的 Python是一个流行的编程语言&#xff0c;它被许多开发者用于构建各种应用程序和工具。 在Python中&#xff0c;有一个常见的编程概念&#xff0c;它被称为“循环”。 循环可以让程序在不停止执行的情况下重复执行一些代码。 在本…

人体行为足力特征分析及其应用研究_kaic

第一章 绪论 随着社会现代化的发展和科技的不断进步&#xff0c;我国航天事业蓬勃发展&#xff0c;与此同时产生了很多亟待解决的难题&#xff0c;康复医疗成为航天医学和康复领域的重要课题之一。载人航天实践证明&#xff0c;失重对航天员生理功能有很大影响&#xff0c;这不…

(2020)高频成分有助于解释卷积神经网络的泛化

High-frequency Component Helps Explain the Generalization of Convolutional Neural Networks 公众号&#xff1a;EDPJ 目录 0. 摘要 1. 简介 2. 相关工作 3. 高频成分 & CNN 的泛化 3.1 CNN 利用高频成分 3.2 鲁棒性和准确性之间的权衡 4. 在重新思考泛化之前…

安装远程软件rustdesk中报错 Error! Could not locate dkms.conf file. File: does not exist.

解决方法 省流&#xff1a;uname -r 查看当前内核&#xff0c;找到/usr/src/目录下的多余的内核文件&#xff0c;删除残留多余的内核文件 原因可能是当时安装nvidia显卡驱动的时候没删除掉旧的内核文件&#xff0c;某些模块或驱动程序可能与特定内核版本相关联&#xff0c;如…

chatgpt赋能python:Python中5!怎么算的?一篇简易教程

Python中5&#xff01;怎么算的&#xff1f;一篇简易教程 在Python中&#xff0c;可以使用一段小小的代码来进行阶乘的计算。本篇文章将带领您了解如何使用Python计算5的阶乘&#xff0c;为您的程序设计带来便利。 介绍 计算阶乘是一项非常基础的数学计算&#xff0c;它常常…

django+python协同过滤推荐算法网上购物商城系统的n9u33

本毕业设计的内容是设计实现一个基于 Django框架的智能推荐算法。它是以 Python语言&#xff0c;MYSQL为数据库开发平台&#xff0c;Tomcat网络信息服务作为应用服务器。智能推荐算法的功能已基本实现&#xff0c;主要包括用户、商品分类、购物商品、订单等。本项目软件架构选择…

《数据库应用系统实践》------ 包包销售系统

系列文章 《数据库应用系统实践》------ 包包销售系统 文章目录 系列文章一、需求分析1、系统背景2、 系统功能结构&#xff08;需包含功能结构框图和模块说明&#xff09;3&#xff0e;系统功能简介 二、概念模型设计1&#xff0e;基本要素&#xff08;符号介绍说明&#xff…

vector的实现(c++)

前言 vector是很重要的数据结构&#xff0c;所以了解它的底层的核心原理是很有必要的&#xff0c;如何了解它的底层原理呢&#xff1f;除了阅读原码外&#xff0c;自己实现一下vector的核心逻辑也是不错的选择。 目录 1.四个默认成员函数 2.迭代器的实现 3.增删查改 4. 容…

栈踩踏实验

程序的存储结构 分布 在磁盘和内存中的分布如下&#xff1a; 节视图 .data&#xff1a;已经初始化的全局变量/局部静态变量 .bss&#xff1a;未初始化的全局变量/局部静态变量 .got.plt&#xff1a;全局偏移量表&#xff0c;保存全局变量引用的地址 .rodata&#xff1a;只读…

2023 Idea 热部署 JRebel 插件激活方法

2023 Idea 热部署 JRebel 插件激活方法 1. 下载源代码 进入下面 github 地址 clone 代码到本地 https://github.com/Byron4j/JrebelLicenseServerforJava 2. 编译和打包 cd /Users/daixiaohu/Desktop/JrebelLicenseServerforJavamvn clean package3. 运行项目 cd target/jav…

前端项目搭建以及项目配置

前端项目搭建 - vitevue3.0ant vite比起webpack速度更快 vite搭建项目 https://cn.vitejs.dev/ 步骤&#xff1a; 1.打开cmd 2.找到项目应该建的文件夹 比如直接建到桌面上 cd desktop3.创建项目 使用创建项目命令&#xff0c;然后根据提示填写项目名称&#xff0c;以及要…

计算机视觉基础:锚框

锚框 目标检测算法通常会在输入图像中采样大量的区域&#xff0c;然后判断这些区域中是否包含我们感兴趣的目标&#xff0c;并调整区域边界从而更准确地预测目标的真实边界框&#xff08;ground-truth bounding box&#xff09;。 不同的模型使用的区域采样方法可能不同。 这里…

KVM网络桥接模式底层网络原理解说

文章目录 前言一、tap设备在kvm中的应用1. tap虚拟网络设备2. Tap/Tun工作原理3. 结论 二、KVM网络桥接模式细节解说1.查看虚拟网卡2.vnet虚拟网卡说明 总结 前言 在以下两篇文章中我们介绍了虚拟网卡技术以及虚拟交换机技术&#xff0c;今天我们再来详细说说在在kvm网络模式下…

chatgpt赋能python:为什么Python在SEO中不见了?

为什么Python在SEO中不见了&#xff1f; Python是众所周知的一种流行的编程语言&#xff0c;它被广泛地用于各种应用程序&#xff0c;从人工智能和机器学习到数据科学和Web应用程序。然而&#xff0c;在最近的一次更新中&#xff0c;有些人注意到Python似乎在搜索引擎优化&…

【LAMP平台建构】

一.LAMP介绍 LAMP架构是目前成熟的企业网站应用模式之一&#xff0c;指的是协同工作的一整套系统和相关软件&#xff0c;能够提供动态Web站点服务及其应用开发环境。LAMP是一个缩写词&#xff0c;具体包括Linux操作系统、Apache网站服务器、MySQL数据库服务器、PHP&#xff08;…

使用JS来实现tab栏切换

这是我今天从学习的知识点&#xff0c;今天试着做了一个tab栏切换&#xff0c;学到很多的知识点&#xff0c;讲师也比学校的老师讲的更加详细明白 个人名片&#xff1a; &#x1f60a;作者简介&#xff1a;一名大一在校生&#xff0c;web前端开发专业 &#x1f921; 个人主页…

c#快速入门

欢迎来到Cefler的博客&#x1f601; &#x1f54c;博客主页&#xff1a;那个传说中的man的主页 &#x1f3e0;个人专栏&#xff1a;题目解析 &#x1f30e;推荐文章&#xff1a;题目大解析2 目录 &#x1f449;&#x1f3fb; c#和c不同之处&#x1f449;&#x1f3fb;程序文件的…

三门问题的实验验证:贝叶斯概率公式实战

引言 数理统计与概率论经常出现在我们的日常生活中&#xff0c;如果能灵活掌握&#xff0c;可以起到很大的帮助。下面通过几个经典问题的探讨&#xff0c;浅入深出&#xff0c;更加深刻的理解贝叶斯全概率公式和贝叶斯公式的作用。 我的最深的体会就是&#xff0c;当某些已发生…

基于Go开发PaaS平台3

Go开发PaaS平台核心功能 代码仓库地址GitHub - yunixiangfeng/gopaas 10-18 中间件前端页面以及核心API开发&#xff08;中&#xff09; C:\Users\Administrator\Desktop\gopaas\middlewareapi\handler\middlewareApiHandler.go package handlerimport ("context"…

【技术解决方案】企业如何从SpringBoot应用平滑迁移到云原生K8s平台

文章目录 在K8S上部署Spring Cloud Alibaba在Kubernetes上部署Spring Cloud Kubernetes在Kubernetes上部署Spring Boot应用方案对比分析拥抱Service Mesh关于DevopsServerless最佳实践 好久不见了&#xff0c;小伙伴们&#xff0c;你们最近还好吗&#xff1f;有没有想我&#x…