c#快速入门(2)

news/2024/12/2 20:52:44/

在这里插入图片描述

欢迎来到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.ppmy.cn/news/100345.html

相关文章

浅尝RTSP

RTSP (real time streaming protocol) RTC2326 RTSP 实时流传输协议,是TCP/IP 协议体系中的一个应用层协议,由哥伦比亚大学, 网景和realnetworks公司提交的IETF RTC 标准&#xff0c;该协议定义了一对多应用程序如何有效地通过IP网络传送多媒体数据。 RTSP在体系结构上位于 rtp…

linux互斥锁(pthread_mutex)知识点总结

对于多线程程序来说&#xff0c;我们往往需要对这些多线程进行同步。同步&#xff08;synchronization&#xff09;是指在一定的时间内只允许某一个线程访问某个资源。而在此时间内&#xff0c;不允许其它的线程访问该资源。我们可以通过互斥锁&#xff08;mutex&#xff09;&a…

二分搜索树层序遍历

二分搜索树的层序遍历&#xff0c;即逐层进行遍历&#xff0c;即将每层的节点存在队列当中&#xff0c;然后进行出队&#xff08;取出节点&#xff09;和入队&#xff08;存入下一层的节点&#xff09;的操作&#xff0c;以此达到遍历的目的。 通过引入一个队列来支撑层序遍历…

c++—文件编程

1. c对文件的操作是由文件流类完成的&#xff0c;文件流类在流类与文件间建立连接&#xff1b; 2. 文件流类型 ①文件输入流&#xff1a;ifstream ②文件输出流&#xff1a;ofstream ③文件输入/输出流&#xff1a;fstream 3. 语法 ①定义文件流类的对象 ifstream ifile; …

张小飞的Java之路——第四十一章——File

写在前面&#xff1a; 视频是什么东西&#xff0c;有看文档精彩吗&#xff1f; 视频是什么东西&#xff0c;有看文档速度快吗&#xff1f; 视频是什么东西&#xff0c;有看文档效率高吗&#xff1f; 介绍 诸小亮&#xff1a;从今天开始&#xff0c;我们学习 IO 流 张小飞…

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

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

c++—封装:构造函数、析构函数、成员操作

1. 封装的主要目的是解决代码的维护性问题&#xff0c;经过封装的函数代码独立性高&#xff1b; 2. 封装的演变历史&#xff0c;以栈为例子介绍&#xff1a; ①成员&#xff08;top、data[ ]&#xff09;都在main函数里&#xff0c;动作方法&#xff08;push、pop&#xff09;…

应急响应-windows

win系统常见的安全事件 1.病毒&#xff0c;木马&#xff0c;蠕虫事件 2.web服务器入侵事件或第三方服务入侵事件 3.系统入侵事件&#xff0c;用win漏洞入侵系统&#xff0c;利用弱口令等。 4.网络攻击事件&#xff0c;如DDos&#xff0c;ARP欺骗等。 win系统安全事件发现的…