C#入门经典学习阶段小结(凌乱)

CLR: common language runtime(.net 公共语言运行库)管理.net库开发的所有应用程序的执行

cts: common type system (通用类型系统)指定最基本类型有助于使用.net framework的各种语言之间进行交互操作
cil:common intermediate language (通用中间语言) 编译代码为该语言,cil代码独立于计算机、os、cpu的,由jit编译器使用创建所需的本机代码
jit: just in time (cil代码仅在需要时才编译)
托管代码:将代码编译为cil,存储在程序集中,再用jit编译器将它编译为本机所需代码,还需要管理正在执行的用.net framework编写的代码。

创建.NET应用程序所需步骤:
->使用C#编写应用程序代码
->把代码编译为CIL,存储在程序集中
->执行代码时,必须使用JIT编译器将代码编译为本机代码
->在托管的CLR环境下运行本机代码

重置vs c#development settings设置:错误 1: 为“CoffeeScript”[代码 5297] 导入设置时出错。

转义序列 例如用\“来转义“双引号,用\n是换行符的转义序列
字符串插入:如输出Console.WriteLine($”{outline}”);
运算符优先级:++,–用作前缀,(),+,-一元时,!,~
*,/,%
+,-
>
,=
==,!=
&
^
|
&&
||
=,*=,/=,%=,+=,-=,>=,&=,^=,|=
++,–用作后缀

C#的分支技术:三元运算符,if语句,switch语句
switch语句在C++中可以运行完一个case语句后运行另一个case,但在C#中这样做是非法的,每个case语句需要一个break中断switch执行
          另外可以使用return语句,不仅中断switch结构,还中断当前函数的执行;还可以用goto语句
三种循环:do循环,while循环,for循环
循环的中断命令:break,continue,return

使用checked设置溢出检查上下文

枚举:枚举值转换为其他类型,需要显式转换

用replace(“str1″,”str2”),替换函数,用str2替换字符串中所有的str1
.Trim()命令,删除空格,可以添加char数组定义删除字符,测试代码时发现trim()出现问题,反而trim(mycahr),[]mychar={‘ ‘}

引用传递参数   ref关键字,改变调用的参数值,必须使用初始化之后的‘非常量const’的变量。
或者使用输出参数  out关键字,可以使用未赋值的变量,函数使用out时必须将其看作尚未赋值。
static关键字定义全局变量,const定义全局常量

函数的签名包含函数的名称及其参数,不包含其返回类型
委托:一种存储函数引用的类型,不带函数体,使用delegate关键字,委托声明指定了一个返回类型和一个参数列表

类:理解为车规划图纸,对象:理解为汽车本身。
类决定了对象将要拥有的属性和行为。
class progrem
{  //可以写字段、函数、属性、构造函数。。
   //字段:存储数据      属性:保护字段 get set (对自动属性进行保护的时候需要实例化)       函数:描述对象的行为      构造函数:初始化对象,给对象的每个属性进行赋值
}

传智播客 基础加强1:
    oop:
                封装:
        —>减少了大量的冗余代码
        —>封装将一坨很难理解的功能封装起来,但是对外提供了一个很简单的使用接口。我们会使用就OK。
    继承:
        —>减少了类中的冗余代码
        —>让类与类产生了关系,为多态打下了基础。
        特性:
            单根性:一个子类只能有一个父类
            传递性:爷爷类 爹类 儿子类
        里氏转换:
            1、子类可以赋值给父类
            2、如果父类中装的是子类对象,则可以将这个父类转换为对应的子类对象
            —->关键字
                1、is:返回bool类型,指示是否可以做这个转换
                2、as:如果转换成功,则返回对象,否则返回null
            作用:我们可以将所有的子类都当做是父类来看,针对父类进行编程,写出通用的代码,适应需求的不断改变。    
    多态:
        —>虚方法
            virtual override
        —>抽象类
            abstract override
        —>接口
            interface 

    关键字
        new
            1、创建对象
                —>在堆中开辟空间(对象是引用类型,引用类型的值都在堆里)
                —>在开辟的堆空间中创建对象
                —>调用对象的构造函数
            2、隐藏父类的成员    (当子类的函数名和父类一样时)
        this
            1、代表当前类的对象
            2、显示的调用自己的构造函数
        base
            1、显示调用父类的构造函数(并不是父类的对象)
            2、调用父类的成员

静态构造函数只能在以下情况下执行:
*创建包含静态构造函数的类实例时
*访问包含静态构造函数的类的静态成员时

string和object是简单的引用类型,数组是隐式的引用类型,创建的每个类都是引用类型
编译器不允许派生类的可访问性高于基类。
接口的指定必须放在基类继承之后,用逗号隔开。
接口没有关键字abstract和sealed(它们不包含实现代码,不能直接实例化,且必须是可以继承)。接口不是类,所以没有继承System.Object

system.Object包含的方法:
    Equals()   bool
    ReferenceEquals() bool:比较传送给它的两个对象,是不是同一个实例的引用
    ToString()   String:返回对应于对象实例的字符串
    MemberwiseClone()  object:创建一个新对象实例并复制成员,以复制该对象
    GetType()  System.Type:返回对象类型(typeof运算符:可以把类名转换为System.Type对象)
    GetHashCode() int:返回一个以压缩形式表示对象状态的值

构造函数初始化器,它把代码放在方法定义的冒号后面。例如可在派生类的构造函数定义中指定所使用的基类构造函数。
    用base()关键字指定.NET实例化过程使用基类中具有指定参数的构造函数

定义不能创建的类:将其定义为静态类,或者将其所有的构造函数定义为私有。
    不能创建的类可通过它们拥有的静态成员来使用。

对于ArrayList集合,使用对象的Add()方法添加新项;

yield 迭代

封箱是把值类型转换为System.Object类型,或者转换为由值类型实现的接口类型。拆箱则相反。
    作用:它允许在项的类型是object的集合中使用值类型,其次,有一个内部机制允许在值类型上调用object方法。

is运算符: is 注意如果是一个值类型,而也是该类型,或者可以拆箱到该类型里,则为true。

不能重载赋值运算符,例如+=,也不能重载&&和||

IComparable在要比较的对象的类中实现,可以比较该对象和另一个对象:提供CompareTo(),int,接受一个对象
IComparer在一个单独的类中实现,可以比较任意两个对象:提供Compare(),int,接受两个对象
类Comparer提供了ICompare接口的默认实现方式:Comparer.Default.Compare(one,two)。CaseInsensitiveComparer类:不区分大小写

声明可空类型:  int? nullableInt;     int?是System.Nullable的缩写,更便于读取

空合并运算符??与空条件运算符?.可以在结果是null时候设置一个默认值:
        int? count=customer.order?.Count() ?? 0;
另外,空条件运算符的另一个用途是触发事件。

协变、抗变:
    泛型类型参数定义为协变,加out关键字,反之,抗变用in关键字

传智播客:
1、导入命名空间
    命名空间就是类的”文件夹”。类就是”文件夹”中的文件。需要导入命名空间
    添加引用:
        如果我需要在一个项目中,访问另一个项目中的某一个类
            —>添加对另一个项目的引用
            —>导入命名空间

2、静态和非静态
    静态成员:被static修饰
    实例成员:不被static修饰
    静态成员先于实例成员被加载到内存中,只有创建了对象,才有实例成员。
    静态类中只能存在静态成员
    调用:
        静态成员调用:
            类名.静态成员名;
        实例成员调用:
            实例名.实例成员;(实例就是我们的对象)
    什么时候使用静态?
        —->作为工具类,比如所有的扩展方法!都需要static
        —->在整个项目中资源共享,正因为它是资源共享的,所以静态成员必须要等到整个项目都结束的时候
        才会被资源释放。
        在我们的项目中应该尽可能的少使用静态成员。
        继承是创建对象的过程。
3、设计模式
        —->单例设计模式
            在整个程序中,我们要保证对象必须是唯一的。
            实现:
                —->第一步:构造函数私有化
                —->第二步:声明一个静态字段,作为全局唯一的单例对象
                —->第三步:声明一个静态函数,返回全局唯一的对象
        示例:
           //第一步:构造函数私有化
            private Form2()
                {
                    InitializeComponent();
                }

            //第二部:声明一个静态的字段用来存储全局唯一的窗体对象
                private static Form2 _single = null;
                       //第三步:通过一个静态函数返回一个全局唯一的对象
            public static Form2 GetSingle()
            {
                if (_single == null)
                {
                    _single = new Form2();
                }
                return _single;
            }
        —->简单工厂设计模式
            核心:把所有的子类都当做父类来看待
            练习:
                提示用户分别的输入两个数字:
                再输入运算符:返回一个计算的父类,并调用方法得到结果。
                Add Sub Cheng Chu
    建筑行业最早应用到设计模式这个概念
        1、注册一个公司
                
        2、招兵买马
        3、投标买地
        4、安排施工队开始施工
        5、卖楼  
        设计模式就是用来专门解决一些特定的问题。        
4、类库
    .dll文件,我们使用类库来帮助我们封装一些常用的功能      
5、值类型和引用类型        
    值类型:int double char bool decimal struct enum
    引用类型:string 数组 自定义类 接口 委托 
    值类型的值存储在内存的栈上,引用类型的值存储在堆中。
    栈上存储数据的效率要高于堆。
        
    值传递:把值类型作为参数传递,把值本身进行传递。
        注意:
        ref可以把值传递改变为引用传递。
    引用传递:把引用类型的值作为参数传递,传递的是引用。

6、字符串的学习
    重要特性:
        不可变性,我们不管对字符串做什么操作,都会在内存中产生一块新的实例。
        驻留池
        我们可以将一个字符串看作是char类型的只读数组。
    GC:Garbage Collection垃圾回收    ,每隔一段时间,会扫描整个内存,发现,如果有的空间没有被指向。则立即把它销毁。       

    1.说明字符串的不可变性2.字符串常量的“暂存池”特性。

    String 字符串,字符串可以看成字符数组,不可变特性(通过for循环,修改string中的元素,失败!)。
    属性
        Length //获得字符串中字符的个数。”aA我你他”→5
    方法
        IsNullOrEmpty()    静态方法,判断为null或者为”” (静态方法)
        ToCharArray() 将string转换为char[]
        ToLower()    小写,必须接收返回值。(因为:字符串的不可变);
        ToUpper()   大写。
        Equals()    比较两个字符串(地址/对象的状态,而==是比较对象引用)是否相同。忽略大小写的比较,StringComparation.
            //对于string类型而言,不管是等号还是Equals比较的都是值本身。
            //Equals默认比较的是地址,但是我们在自己定义的类中如果用到Equals,都会将Equals进行重写,使之按照我们自己的需求进行比较
        IndexOf() 如果没有找到对应的数据,返回-1.//面试题:统计一个字符串中,”天安门”出现的次数。    
        LastIndexOf()    如果没有找到对应的数据,返回-1
        Substring()    //2个重载,截取字符串。
        Split()   //分割字符串。        
        Join()        静态方法
        Replace()

对象初始化器:采用非默认的构造函数/不必添加额外代码,为每个属性使用键值对提供其值。
    合并对象、集合初始化器(适合于LINQ技术一起使用)(编译器为在集合初始化器中提供的每一项调用集合的Add()方法)

var关键字,隐式推理变量类型,可以是int、string、数组(数字值从来都不会被解释为可空类型,除非是定义new int?[ ] )等等
    如果要在数据存储对象中修改属性的值,就不能使用匿名类型(因为被定义为只读属性)

dynamic关键字,动态变量类型,

可选参数,没有默认值的参数不能放在有默认值参数的后面。

命名参数,参数顺序任意并且可选。但如果混合使用命名参数和位置参数,就必须包含所有的位置参数,其后是命名参数。

Lambda表达式:是一个委托,赋给一个委托类型的变量;解释为表达式树
    表现:  括号中的参数列表=>C#语句/{多行代码+如果还不是void的委托,需要加return}
    LINQ框架包含一个泛型类,可用于封装Lambda表达式,使用该类的一种方式是提取用C#编写的Lambda表达式,将它转换为相应的SQL脚本

扩展方法Aggregate(),表示把一个累加器函数应用于集合中从开始到结束的每对元素上。

传智播客 基础加强3:
    1、StringBuilder:进行大量字符串操作的时候的工具。String对象是不可变的。
        将StringBuilder转换为String用ToString();
        仅仅是拼接字符串的工具,大多还会转换为String
        *StringBuilder sb=new StringBuilder();
        *sb.Append();//追加字符串
        *sb.ToString();//ToString(“x2”),表示转换为16进制,并且是两位的。
        *sb.Insert();
        *sb.Replace();
        使用程序拼接html中的table:WPF中没有窗体应用程序的DocumentText,只能使用webBrow.NavigateToString(sb.ToString());
    2、out:out参数侧重于在函数中返回多个值;参数要求必须在方法的内部为其赋值
    3、ref参数:ref参数侧重于将一个值带澳函数中进行改变,再讲改变后的值带出去。ref参数在函数内不用赋值,函数外必须为ref参数赋值
    4、
    5、集合的学习:
        非泛型集合:
            ArrayList
            Hashtable
        泛型集合:
            List:相对于数组,不用确定初始范围
                Capcity:集合中可以包含的元素的个数(初始值为4,每次翻倍)
                Count:获取集合中实际包含的元素的个数
                Add():添加单个元素
                AddRange():添加一个集合
                Insert():插入一个元素
                InsertRange():插入一个集合
                Remove():移除指定的元素
                RemoveAll():里面是lambda表达式,例如list.RemoveAll(n => n > 3)凡是大于3的数据全部删除
                RemoveAt():根据下标移除元素
                RemoveRange():移除一定范围内的元素
                ToArray():集合转换成数组
                ToList():数组转换成集合 

            Dictionary
    6、装箱和拆箱:
        装箱:值类型—>引用类型
        拆箱:引用类型—>值类型
        我们判断是否发生了拆箱或者装箱,首先要判断这两种数据类型是否存在继承关系。
        装箱的时候用什么类型装的箱,拆的时候就拿什么类型拆。
    7、编码格式:
        将字符串是怎样的形式保存为二进制。
            ascii 256
            6000 GB2312
            GBK  GB18030

            ISO
                Unicode
                    utf-16
                    utf-8
            出现乱码的原因:我们保存这个文件的时候采取的编码跟打开这个文件的时候采取的编码格式不一致。
            文本文件:拖到txt中还能看得懂得就是文本文件。
                    .txt   .html   .ini        .xml
        File的基本操作:操作文件
            Exist():判断指定的文件是否存在
            Create():创建
            Move():剪切
            Copy():复制
            Delete():删除
            ReadAllLines() ReadAllText()默认采用的编码格式是utf-8
        Directory:操作的是文件夹
            CreateDirectory:创建一个新的文件夹
            Delete:删除
            Move:剪切
            Exist()判断指定的文件夹是否存在
            GetFiles()获得指定目录下所有文件的全路径
                Directory.GetFiles(@”E:\download”, “*.avi”)获得所有的.avi文件
            GetDirectories()获得指定目录下所有的文件夹
                只能获得当前第一目录下所有的文件夹
    正则表达式  主要类:Regex
        就是一个模板,我们可以使用这个模板,去一坨字符串中找到我们想要的数据。
        注意:正则表达式是操作字符串的。
        组成:
            限定符,元字符,常用的表达式
        判断是否匹配:Regex.IsMatch(“字符串”,”正则表达式”);
        字符串提取:Regex.Match(“字符串”,”要提取的字符串的正则表达式”);
            (循环提取所有):Regex.Matches()
        字符串替换:Regex.Replace(“字符串”,”正则”,”替换内容”);
        .+?  匹配大量字符
        (?  )  可以给括号匹配部分起名
        贪婪模式:
            “1111。11。11。11111。”
            贪婪: .+。  尽可能多的匹配
            非贪婪:  .+?。尽可能的少匹配,1个

样式:批量设置要应用到控件上的某些属性
模板:在其基础上设置控件外观的控件 
触发器:
    要定义Tigger对象监视的属性,应使用Trigger.Property属性
    要定义何时激活Trigger对象,应设置Trigger.Value属性
    要定义Trigger触发的操作,应将Trigger.Setters属性设置为Setter对象的一个集合
动画:通过故事板创建,storyboard对象包含在资源字典中,必须通过x:Key属性来识别
    

    不含关键帧的时间线:DoubleAnimation、PointAnimation和ColorAnimation

依赖属性:输入propdp+两下Tab键,即可插入属性模板

XML:可扩展的标记语言
    与HTML的区别:XML中的元素必须关闭!XML中元素的属性必须用引号
    语法规范:标签(Tag)、嵌套(Nest)、属性。
            标签(即元素Element)要闭合,属性值要用“”包围,标签可以互相嵌套。
            在XML中是节点(Node)包含元素(Element)。
    大小写敏感
    创建XML:DOM文档对象模型
            XmlDocument doc=new XMLDocument();
            XmlElement order = doc.DocumentElement;//根节点
    使用XPath查询XML:
             XmlNode xn = order.SelectSingleNode(“/Order/Items/OrderItem[@Name=’雨衣’]”);
    根节点不允许删除,即doc.RemoveAll();不可以
                    但是order.RemoveAll();可以,移除根节点下的所有子节点
            删除子节点:ITems.RemoveChild(xn);
            删除某节点的属性值:xn.Attributes.RemoveNamedItem(“Count”);

ctrl+K和S/X,快捷键插入代码段/外侧代码,比如#region

委托delegate:使用委托把一个函数作为参数传递
        函数可以直接赋值给一个委托对象 委托的签名必须跟函数的签名一样(即返回值和参数类型一致)
        DelSayHi del = SayHiChinese;//new DelSayHi(SayHiChinese);
    对比:    委托是不安全的,
            事件本身是一个安全的委托

定义事件:
        public delegate void delTest();     //注册事件时需要一个委托
        public event delTest eventTest;     //不要小括号
    注册事件:    
        eventTest += new delTest(method1);
        eventTest += new delTest(method2);
总结:
    委托的作用:
        占位,在不知道将来要执行的方法的具体代码时,可以先用一个委托变量来代替方法调用(委托的返回值和参数列表要确定)
    事件的作用:
        事件的作用与委托变量一样,只是功能上比委托变量有更多限制。
        比如:一、只能通过+=或-=来绑定方法,二、只能在类内部调用(触发)事件。

程序集的好处:
    程序中只引用必须的程序集,减少程序的尺寸;
    程序集可以封装一些代码,只提供必要的访问接口。

第16章:
云:只是运行在一个数据中心的大量商品化的计算机硬件,这个数据中心可以运行程序,存储大量数据。
        具有弹性,即动态向上扩展的能力(例如增加内存和CPU)和/或动态向外扩展的能力(增加虚拟服务器实例的数量)
云服务模式:
    1、基础设施即服务(IaaS):要从操作系统开始向上负责。
    2、平台即服务(PaaS):值负责运行在所选操作系统上的程序及其依赖项。
    3、软件即服务(SaaS):通过互联网访问的设备上使用的一个软件程序或服务。

相关推荐:

【c#教程】C# 数据类型 

通过静态局部变量看C,C++,C#,Java,PHP的特点

以上就是C#入门经典学习阶段小结(凌乱)的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1432846.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
从事C/C++开发多年,给零基础想学习C/C++的几点建议
上一篇 2025年12月17日 08:40:17
下一篇 2025年12月17日 08:40:29

相关推荐

  • c++中的SFINAE技术是什么_c++模板编程中的SFINAE原理与应用

    SFINAE 是“替换失败不是错误”的原则,指模板实例化时若参数替换导致错误,只要存在其他合法候选,编译器不报错而是继续重载决议。它用于条件启用模板、类型检测等场景,如通过 decltype 或 enable_if 控制函数重载,实现类型特征判断。尽管 C++20 引入 Concepts 简化了部分…

    2026年5月10日
    000
  • c#文件怎么打开

    打开 C# 文件有三种方法:Visual Studio:启动 Visual Studio,通过“文件”菜单打开 C# 文件。文本编辑器:使用文本编辑器打开 C# 文件,将其视为普通文本。.NET Core 命令行工具:使用 csc.exe 命令行工具编译 C# 文件,生成可执行文件。 如何打开 C#…

    2026年5月10日
    000
  • c++如何实现UDP通信_c++基于UDP的网络通信示例

    UDP通信基于套接字实现,适用于实时性要求高的场景。1. 流程包括创建套接字、绑定地址(接收方)、发送(sendto)与接收(recvfrom)数据、关闭套接字;2. 服务端监听指定端口,接收客户端消息并回传;3. 客户端发送消息至服务端并接收响应;4. 跨平台需处理Winsock初始化与库链接,编…

    2026年5月10日
    100
  • 函数指针在 C++ 多态中的作用:揭示多态背后的真相

    函数指针在 C++ 多态中的作用:揭示多态背后的真相 简介 多态是面向对象编程的一项强大功能,它允许对象在运行时以不同的方式表现。C++ 中的多态实现依赖于函数指针。本文将深入探讨函数指针在多态中的作用,并通过一个实战案例展示如何利用它们。 函数指针 立即学习“C++免费学习笔记(深入)”; 函数指…

    2026年5月10日
    000
  • C++框架与Java框架在易用性方面的比较

    c++++ 框架的易用性低于 java 框架,具体原因如下:c++ 框架学习曲线陡峭,需要深入理解 c++ 语言。易出错且调试困难。而 java 框架具有以下易用性优势:学习曲线低,尤其适合 java 初学者。提供丰富的库和工具,简化开发。运行时异常处理,简化异常处理。 C++ 框架与 Java 框…

    2026年5月10日
    000
  • c++中头文件和源文件的区别_c++头文件与源文件作用对比

    头文件声明接口,源文件实现逻辑。头文件含类、函数声明及宏定义,通过#include被多文件共享,用include守卫防重;源文件实现具体功能,编译为目标文件后由链接器合并。声明与实现分离提升模块化与编译效率,模板和内联函数因需编译时可见故常置于头文件,命名空间避免符号冲突,整体结构使项目更清晰易维护…

    2026年5月10日
    000
  • C++ 函数重载在事件驱动的编程中的应用

    在事件驱动的编程中,函数重载可创建具有不同参数签名的相似功能,为单一函数名提供多样化功能。它包含以下优点:代码可读性:使用单一函数名表示相关任务。可维护性:避免重复编写类似逻辑。可重用性:跨项目和应用程序 reutilizar。 C++ 函数重载在事件驱动的编程中的应用 在事件驱动的编程中,函数重载…

    2026年5月10日
    000
  • C++ 函数性能优化对系统稳定性的影响

    标题:C++ 函数性能优化对系统稳定性的影响 简介 函数性能优化是 C++ 程序员提高程序效率的关键技术。本文将探讨函数性能优化对系统稳定性的影响,并提供实战案例来证明这一点。 性能优化对稳定性的作用 立即学习“C++免费学习笔记(深入)”; 函数性能优化不仅可以提升程序速度,还可以提高系统的稳定性…

    2026年5月10日
    000
  • WebAssembly中导入JavaScript函数:无胶水代码集成指南

    本文深入探讨了在WebAssembly模块中直接导入和使用JavaScript函数的机制,特别是当使用Emscripten的STANDALONE_WASM和SIDE_MODULE编译模式时。文章详细分析了TypeError: import object field ‘GOT.mem&#8…

    2026年5月10日
    000
  • C++如何编译和链接_C++从源码到可执行文件的过程解析

    c++kquote>预处理展开宏和头文件,编译生成汇编代码,汇编转为机器码,链接合并目标文件与库生成可执行程序。 当你写完一段C++代码,比如一个简单的hello world程序,最终能运行起来,背后其实经历了一系列步骤:预处理、编译、汇编和链接。这个过程将人类可读的源码转换成机器可以执行的程…

    2026年5月10日
    000
  • c++中sizeof运算符的用法和常见陷阱 _c++ sizeof使用技巧及陷阱解析

    sizeof运算符在编译时计算类型或对象的字节大小,返回size_t类型,常用于获取数据大小、数组元素个数及内存操作;但存在数组传参退化为指针导致失效、对指针无法获知动态内存大小、表达式不求值、结构体因对齐产生填充等常见陷阱;需结合模板、显式传参、对齐控制等方式规避问题,提升代码可移植性和安全性。 …

    2026年5月10日
    000
  • C#如何进行网络编程?Socket与TCP/IP通信编程实例详解

    C#通过Socket类实现TCP通信,首先服务器绑定IP和端口并监听,客户端发起连接,双方通过Send/Receive收发数据,最后关闭连接。 C# 进行网络编程主要依赖于 System.Net 和 System.Net.Sockets 命名空间,其中最核心的是使用 Socket 类实现基于 TCP…

    2026年5月10日
    000
  • C++ 函数递归详解:递归查找列表中的元素

    递归查找列表元素的步骤如下:递归基础条件:如果列表为空,则元素不存在。递归过程:使用递归调用查找列表的剩余部分,并调整返回的索引。检查列表的第一个元素:如果第一个元素与所查找的元素相等,则元素位于索引 0 处。找不到:如果递归和第一个元素检查都没有找到,则元素不存在。 C++ 函数递归详解:递归查找…

    2026年5月10日
    000
  • C++怎么使用C++17的并行算法库_C++ std::execution与多核性能优化

    c++kquote>C++17通过std::execution策略引入并行算法支持,需编译器(如GCC 8+)和线程库(如TBB)配合;提供seq、par、par_unseq三种策略控制执行模式;可用于sort、for_each等算法提升大数据性能,但需避免数据竞争,推荐使用reduce等安全…

    2026年5月10日
    000
  • c++ lambda表达式怎么写 c++匿名函数用法详解

    答案是lambda表达式可简洁定义匿名函数,用于STL算法等场景。其语法包含捕获列表、参数列表、mutable、返回类型和函数体,如[=](int x) { return x > 0; }可值捕获外部变量并用于判断正数。 在C++中,lambda表达式是一种创建匿名函数的简洁方式,常用于需要传…

    2026年5月10日
    200
  • C++框架的Unlicense许可类型简介

    unlicense 许可证类型为免费且宽松,允许用户在不附加任何限制的情况下使用、修改和分发软件。它旨在最大限度地减少限制和允许最大的自由度,具有以下好处:简洁易懂高度开放无保证 C++ 框架的 Unlicense 许可证类型简介 了解 Unlicense Unlicense 是一个自由和宽松的软件…

    2026年5月10日
    000
  • 利用日志记录增强 C++ 函数的调试能力

    如何利用日志记录增强 c++++ 函数的调试能力?使用 glog 库进行日志记录: 安装 glog,并在代码中使用 glog 头文件和 initgooglelogging() 初始化日志记录。添加日志记录语句: 使用 log() 宏在要记录的代码块中添加日志记录语句,以记录函数开始、结束或其他重要事…

    2026年5月10日
    000
  • C++ 函数模板如何使用并在实际场景中应用?

    函数模板允许您定义可以处理不同类型参数的函数的通用版本。语法为:template,其中 t 是类型参数。要使用函数模板,请指定所需的参数类型,例如:max(10, 20)。函数模板在排序等实际应用中很有用,例如:template void sort(t arr[], int size)。它们具有通用…

    2026年5月10日
    000
  • C++ 并发编程中内存访问问题及解决方法?

    在 c++++ 并发编程中,共享内存访问问题包括数据竞争、死锁和饥饿。解决方案有:原子操作:确保对共享数据的访问是原子性的。互斥锁:一次只允许一个线程访问临界区。条件变量:线程等待某个条件满足。读写锁:允许多个线程并发读取,但只能允许一个线程写入。 C++ 并发编程中的内存访问问题及解决方案 在多线…

    2026年5月10日
    000
  • c++如何实现函数的重载_c++函数重载实现方法

    函数重载通过参数列表差异实现,如类型、数量或顺序不同,编译器根据实参选择对应函数,返回类型不同不能单独用于重载。 在C++中,函数重载允许在同一作用域内定义多个同名函数,只要它们的参数列表不同(参数个数、类型或顺序不同),编译器会根据调用时传入的实参来选择匹配的函数。函数重载不能仅通过返回类型的不同…

    2026年5月10日
    000

发表回复

登录后才能评论
关注微信