深入.NET平台和C#编程总结大全

第一章   简单认识.NET框架

   (1)首先我们得知道 .NET框架具有两个主要组件:公共语言进行时CLR(Common Language Runtime)和框架类库FCL(Framework Class Library)

       配图:

              

   (2).NET的编译过程:

        配图:

              

     其中,CLR还包括通用类型系统CTS(Common Type System)和公共语言规范CLS(Common Language Specification)

   (3).NET框架核心类库及其功能

      配图:

           

        

    (4)

        C#语言要编程可以被CPU解析执行的代码需要两次编译:

         第一次编译:将C#语言通过C#编译器编译成MSIL中间代码

         第二次编译:将MSIL代码通过即时编译器(JIT)编译成CPU可以解析执行的代码,或者成为(平台专用代码)

       Java程序想要被CPU解析执行也需要两次编译:

         第一次编译:将后缀名为java的文件通过Java编译器编译成后缀名为.class(字节码)文件

         第二次编译:将.class文件通过Java虚拟机(jvm)编译成CPU可以解析的代码

    (5)面向对象

           面向对象三大特性:封装,继承和多态

          那些年我们学过的访问修饰符:

          public :任何位置,包括跨程序集

          internal:在当前程序集(项目)中都可以访问

          private:只能在当前类中访问(当前类的花括号中访问)

          protected:只能在当前类和子类中使用

    (6)变量,类和方法的命名

         骆驼命名法:第一个单词的首字母小写,后续有含义的单词首字母大写。   变量

         帕斯卡命名法:每一个单词的首字母大写    类和方法

     (7)new:代表的含义

           1.创建对象

           2.开辟空间

           3.自动调用构造函数

    (8)字段和属性的区别

           1.属性不能保存数据,真正保存数据的是字段。

           2.属性是可有可无的,字段是必须的。

           3.如果字段只是让类内部访问,那么设置成private,如果想找一个中间者,在Main方法中访问到类中的私有字段,那么属性可以是一种选择。

    (9)自动属性

          定义:当为我们不需要进行逻辑判断时可以使用自动属性。 定义自动属性在后台会自动帮我们生成一个对应数据类型的私有字段 

    (10)CLR的主要用途:

        CLR是所有.NET程序运行的环境,是所有.NET应用程序的编程基础,所有.NET受CLR监管和处理,这些操作包括进程内的应用程序加载,将IL转换为GG,

        异常处理,垃圾回收,加载程序集

                                                     第二章 深入C#数据类型

    (1)值类型和引用类型

        值类型:是在栈上存储真实的值    引用类型:在栈和堆上都开辟空间

        值类型:int  double float boolean  char byte long short  枚举(enum)  结构体(struct)

       引用类型:int[] class 接口(interface) string

    (2)结构

       定义:

         

访问修饰符  struct  结构名{// 结构体}例:
public struct Student
{//结构体
}

   (2)注意点:

       1.在结构中可以有字段和方法

       2.定义结构时,结构中的字段不能被赋初值

       3.可以不用new,直接定义结构的对象即可

       4.声明结构的对象后,必须给结构的成员赋初值

       5.结构体也是一种特殊的值类型

   (3)装箱和拆箱

        将值类型转换为引用类型的过程称为装箱,反之称为拆箱

       示例:

        

static void Main(String[] args)
{int i=123;oject o=i;  //装箱i=456;   //改变i的内容Console.WriteLine("值类型的值:{0}",i); Console.WriteLine("引用类型的值:{0}",o); 
}

   (4)不同类型的参数传递
         值方式参数传递:传递数据类型是值类型,没有ref在方法中不会保留

                               传递数据类型是引用类型,没有ref在方法中会永久保留

         引用方式传递:不管有没有ref都会永久保留

    

例:class Voter
{public void Vote(SE se){//人气值+1se.Popularity++;}
}/测试相关代码SE  zhang=new SE();
zhang.Age=25;
zhang.Name="张梅";
zhang.Gender=Gender.female;
zhang.Popularity=10;
//投票前
MessageBox.Show(zhang.SayHi());
Voter voter=new Voter();
voter.Vote(zhang);  //引用类型做参数
//投票后
MessageBox.Show(zhang.SayHi());

   (5)结构和类的区别
         1.结构是值类型而类是引用类型

         2.结构和另外一个结构不能继承和被继承

         3.结构没有默认构造而类有

         4.结构体没有析构函数而类有

         5.结构体可以不使用new初始化,而类不可以

 第三章  使用集合组织相关数据

   (1)定义:

           集合:

         某些特定的对象集中在一起就是集合

            数组:

         可以存储相同数据类型的一堆数据的容器

    (2)集合

         集合分为泛型集合和非泛型集合

          泛型集合分为单列和双列集合  (List<T>和Dictionary<K,V>)

          非泛型集合分为单列和双列集合 (ArrayList和HashTable)

     (3)常用的方法和属性

         

 Add();   //添加Remove();  //删除RemobeAt(); //根据索引删除  不适用 双列集合 count  //集合存储元素的个数Contains();  //检测元素是否存在ContainsKey();  //ContainsValue();Capcity //集合占用空间

     注意事项:如果删除了集合中的某一个元素,那么集合的索引会自动维护

   (4)遍历方案:

     

ArrayList list=new ArrayLIst();
Student stu1=new Student();stu1.Name="jiejie";stu1.Age=15;list.Add(stu1);
Student stu2=new Student();stu2.Name="jiji";stu2.Age=18;list.Add(stu2);//foreach
foreach(Student item in list)
{Console.WriteLine(item.Age+"\t"+item.Name);
}//for
for(int i=0;i<list.Count;i++)
{Console.WriteLine((Student)list[i].Name);
}

HashTable 遍历三种方案HashTable table=new HashTable();
第一种方式:遍历所有的Keys
foreach(var item in table.Keys)
{//一个item代表一个keyConsole.WriteLine("key是{0}\tvalue是{1}",item,table[item]);
}第二种遍历方式:遍历所有的value集合
foreach(var item in table.Values)
{//一个item代表一个valueConsole.WriteLine("value是{0}",item);
}//遍历整个table
foreach(DictionaryEntry item in table)
{Console.WriteLine("key是{0}\tvalue是{1}",item.Key,item.Value);
}

第四章 深入类的方法

  (1)构造函数

       方法名和类名相同,没有返回值

       注意:在C#中,当我们定义了一个类后,系统底层默认会生成一个和类名相同的无参构造,但是如果我们定义了一个带参构造,系统将不生成无参构造,但是在

              真正的开发中建议大家定义两个构造函数,一个无参构造和带参构造

    

public class SE
{public SE()
{}public SE(string id,string name,int age,Gender gender,int popularity)
{Id=id;Name=name;Age=age;Gender=gender;Popularity=popularity;
}
}

    (2)方法的重载

        在同一个类中,如果有多个方法方法名相同,但是参数的个数,顺序,类型不同的多个方法可以构成重载和方法的返回值类型没有关系。

      

public void Say(string name,int age)
{}public void Say(int age,string name)
{}

   (3)对象间的交互

    

//遥控器类
public class RemoteControl
{//开机public void TurnOn(Tv tv){tv.Open();  //调用电视机对象的开机方法}//关机public void TurnOff(Tv tv){tv.TrunOff();}//换台public void ChangeChannel(Tv tv){Console.WriteLine("请输入频道:");string ChannelNo=Console.ReadLine();tv.Change(ChannelNo);}
//电视机类
public class Tv
{public boolean isOn=false; //是否开机//打开电视机public void Open(){if(isOn){Console.WriteLine("电视机已打开");}else{Console.WriteLine("成功打开电视机");isOm=true;}}//关机public void TurnOff(){if(isOn){Console.WrteLine("电视机正在关机");isOn=false;}else{Console.WriteLine("电视机已关闭");}}//换台public void Change(string channelNo){if(isOn){Console.WriteLine("正在切到{0}台",channelNo);}}
//测试Main()方法static void Main(String[] args){RemoteControl controler=new RemoteControl();Tv tv=new Tv();//开机controler.TurnOn(tv);//切换频道controler.ChangChannel(tv);//关机controler.TurnOff(tv);Console.ReadLine();
}

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

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

相关文章

Java - JVM内存区域的划分

Java 程序运行时&#xff0c;需要在内存中分配空间。为了提高运算效率&#xff0c;就对空间进行了不同区域的划分&#xff0c;因为每一片区域都有特定的处理数据方式和内存管理方式。 分配&#xff1a;通过关键字new创建对象分配内存空间&#xff0c;对象存在堆中。 释放 &…

柔性数组详解

前言&#xff1a;柔性数组是C99中新添加的概念&#xff0c;它是结构体里面的最后一个成员&#xff0c;因为它的大小未知&#xff0c;所以很灵活&#xff0c;称之为柔 1 柔性数组占不占结构体的空间呢&#xff1f; 不占 typedef struct Stu {char y;int x;int arr[];//有些编译器…

数据在内存中的存储(整型篇)

1.辨析原码反码补码&#xff1a; 1.原码&#xff1a;有32位&#xff08;int类四个字节&#xff0c;一个字节八个比特位&#xff09;&#xff0c;第一位是符号位&#xff0c;0正1负&#xff0c;其余为二进制位。 2.计算一般是对原码进行计算&#xff0c;但在负数计算使用原码会导…

高效利用内存资源之动态内存管理详解

目录 一、为什么存在动态内存分配 二、动态内存函数的介绍 2.1malloc 2.2free 2.3calloc 2.4realloc 三、常见的动态内存错误 3.1对NULL指针的解引用操作 3.2对动态开辟空间的越界访问 3.3对非动态开辟内存使用free释放 3.4使用free释放一块动态开辟内存的一部分 3.…

Spring Boot 3 集成 Druid 连接池详解

在现代的Java应用中&#xff0c;使用一个高效可靠的数据源是至关重要的。Druid连接池作为一款强大的数据库连接池&#xff0c;提供了丰富的监控和管理功能&#xff0c;成为很多Java项目的首选。本文将详细介绍如何在Spring Boot 3项目中配置数据源&#xff0c;集成Druid连接池&…

【ACM独立出版、确定的ISBN号】第三届密码学、网络安全和通信技术国际会议(CNSCT 2024)

第三届密码学、网络安全和通信技术国际会议&#xff08;CNSCT 2024&#xff09; 2024 3rd International Conference on Cryptography, Network Security and Communication Technology 随着互联网和网络应用的不断发展&#xff0c;网络安全在计算机科学中的地位越来越重要&…

精选:免费且高效的邮件营销软件推荐

好用的邮件营销软件可以帮助企业获取客户、维系客户关系。对于有想做邮件营销想法&#xff0c;但是想先试试的企业来讲&#xff0c;免费版邮件营销软件就是个不错的选择。当然&#xff0c;免费的邮件邮件营销软件虽然在价格上有极大的优势&#xff0c;但是功能上会有各种限制。…

【小白专用】MySQL查询数据库所有表名及表结构其注释

一、先了解下INFORMATION_SCHEMA 1、在MySQL中&#xff0c;把INFORMATION_SCHEMA看作是一个数据库&#xff0c;确切说是信息数据库。其中保存着关于MySQL服务器所维护的所有其他数据库的信息。如数据库名&#xff0c;数据库的表&#xff0c;表栏的数据类型与访问权 限等。在INF…

网络安全——SSH密码攻击实验

一、实验目的要求&#xff1a; 二、实验设备与环境&#xff1a; 三、实验原理&#xff1a; 四、实验步骤&#xff1a;​ 五、实验现象、结果记录及整理&#xff1a; 六、分析讨论与思考题解答&#xff1a; 一、实验目的要求&#xff1a; 1、了解SSH密码攻击、FTP密码攻击…

Jmeter 请求签名api接口-BeanShell

Jmeter 请求签名api接口-BeanShell 项目签名说明编译扩展jar包jmeter 使用 BeanShell 调用jar包中的签名方法 项目签名说明 有签名算法的api接口本地不好测试&#xff0c;使用BeanShell 扩展jar 包对参数进行签名&#xff0c;接口签名算法使用 sha512Hex 算法。签名的说明如下…

Mybatis是如何进行分页的?

程序员的公众号&#xff1a;源1024&#xff0c;获取更多资料&#xff0c;无加密无套路&#xff01; 最近整理了一份大厂面试资料《史上最全大厂面试题》&#xff0c;Springboot、微服务、算法、数据结构、Zookeeper、Mybatis、Dubbo、linux、Kafka、Elasticsearch、数据库等等 …

Django系列之Celery异步框架+RabbitMQ使用

在Django项目中&#xff0c;如何集成使用Celery框架来完成一些异步任务以及定时任务呢&#xff1f; 1. 安装 pip install celery # celery框架 pip install django-celery-beat # celery定时任务使用 pip install django-celery-results # celery存储结果使用2. Django集成…

gin投票系统3

对应视频v1版本 1.优化登陆接口 将同步改为异步 原login前端代码&#xff1a; <!doctype html> <html lang"en"> <head><meta charset"utf-8"><title>香香编程-投票项目</title> </head> <body> <m…

开关量防抖滤波器(梯形图和SCL源代码)

模拟量防抖超限报警功能块请查看下面文章链接: https://rxxw-control.blog.csdn.net/article/details/133969425https://rxxw-control.blog.csdn.net/article/details/133969425 1、开关量防抖滤波器 2、防抖滤波 3、梯形图代码

2.Feign使用、上下文隔离及源码阅读

目录 概述使用配置pom.xmlfeign 接口编写controller 测试降级处理pom.xmlapplication.yml代码 Feign如何初始化及调用源码阅读初始化调用 feign的上下文隔离机制源码 结束 概述 阅读此文&#xff0c;可以知晓 feign 使用、上下文隔离及源码阅读。源码涉及两方面&#xff1a;fe…

课后作业7.3.1:构造一个自己的小操作系统

构造一个自己的 mini 操作系统 任务描述 请实现如下功能&#xff1a; 1.写一个命令解释器程序 mysh.c &#xff0c;其功能是接收用户输入的命令并给出反馈。要求该程序既支持内部命令 cd、sync、exit &#xff1b;也支持外部命令&#xff0c;即可以接收 cat、ls 等命令&#x…

数据结构与算法-Rust 版读书笔记-2线性数据结构-双端队列

数据结构与算法-Rust 版读书笔记-2线性数据结构-双端队列 1、双端队列 deque又称为双端队列&#xff0c;双端队列是与队列类似的项的有序集合。deque有两个端部&#xff1a;首端和尾端。deque不同于队列的地方就在于项的添加和删除是不受限制的&#xff0c;既可以从首尾两端添…

vue3封装接口

在src下面创建一个文件夹任意名称 我拿这个名字举例子了apiService 相当于创建一个新的文件 // 封装接口 // apiService.js import axios from axios;// 接口前缀 const API_BASE_URL 前缀;接口后缀export const registerUser async (fileData) > {try {const response …

透析跳跃游戏

关卡名 理解与贪心有关的高频问题 我会了✔️ 内容 1.理解跳跃游戏问题如何判断是否能到达终点 ✔️ 2.如果能到终点&#xff0c;如何确定最少跳跃次数 ✔️ 1. 跳跃游戏 leetCode 55 给定一个非负整数数组&#xff0c;你最初位于数组的第一个位置。数组中的每个元素代表…

微信商家收款码扣多少手续费

很多人想申请低手续费率的收款码不知从何下手&#xff0c;在参考了大量博客教学之后&#xff0c;终于搞懂了详细流程以及注意事项。在此记录一下。我申请的是一个只需要0.2%费率的微信收款码&#xff0c;申请时间是2022年2月12日。申请之前只需要准备营业执照和法人身份z&#…