首页 > 编程语言 >C#知识整理-类型

C#知识整理-类型

时间:2024-12-19 12:03:40浏览次数:3  
标签:Console str C# 知识 类型 引用 WriteLine 整理 100

值类型和引用类型是c#类型的两个主要类别。他们都继承自System.Object。使用struct关键字定义的类型是值类型,使用class关键字定义的类型是引用类型。 它们的关系如下图:

 

值类型
  • 基本数据类型:int, double, float, bool, char, byte, sbyte, short, ushort, uint, long, ulong,datetime。
  • 结构体(Struct):struct。
  • 枚举(Enum):enum。
  • 值元组(Tuple):(decimal, int) t1=(1.1m, 3)
  • 可为空的值类型(Nullable):Nullable或T?
特点:
  1. 存储位置: 值类型存储在栈(Stack)上。
  2. 内存分配: 每个值类型变量都有自己的内存空间,因此它们是独立的。
  3. 赋值操作: 当值类型变量被赋值给另一个变量时,会创建该值的一个副本。
  4. 内存效率: 由于值类型存储在栈上,它们通常比引用类型更快。
  5. 默认值: 值类型变量在声明时必须被初始化,否则会报错。
引用类型
  • 基本数据类型:string, dynamic, object。
  • 类(Class):class。
  • 接口(Interface):interface。
  • 数组(Array):[]。
  • 委托(Delegate):delegate。
  • 记录 (record): record。
特点:
  1. 存储位置: 引用类型存储在堆(Heap)上,而引用本身存储在栈上。
  2. 内存分配: 引用类型的变量指向同一块内存地址,因此它们可以共享数据。
  3. 赋值操作: 当引用类型变量被赋值给另一个变量时,两个变量将引用同一块内存地址。
  4. 内存效率: 由于引用类型需要额外的间接寻址,它们通常比值类型慢。
  5. 默认值: 引用类型变量在声明时如果没有被初始化,它们会被自动初始化为null。
  一些类型的初始化
internal class Program
{
    static void Main(string[] args)
    {
        //值类型
        int iA=10; 
        int iB=iA;
        iB = 100;
        Console.WriteLine(iA);
        Console.WriteLine(iB);
        /*
         * iA=10
         * iB=100
         */
        //测试溢出
        short iC = 32767;
        Console.WriteLine(iC); //32767
        iC++;
        Console.WriteLine(iC); //-32768

        double a = 0.1f;
        double b = 0.2f;
        double c = a + b;
        Console.WriteLine($"a:{a}, b:{b}, c:{c}");
        /*
         * a:0.10000000149011612, b:0.20000000298023224, c:0.30000000447034836
         * double 的精度问题可以
         */

        decimal d = 0.1m;
        decimal e = 0.2m;
        decimal f = e + d;
        Console.WriteLine($"d:{d}, e:{e}, f:{f}");
        /*
         * d: 0.1, e: 0.2, f: 0.3
         */

        var charA = 'A';
        Console.WriteLine($"chatA:{charA}, type: {charA.GetType()}");
        /*chatA:A, type: System.Char*/

        (decimal, int) t = (1.1m, 3);
        Console.WriteLine(t);//(1.1, 3)
        Console.WriteLine($"{t.Item1}:{t.Item2}");//1.1:3

        bool? bA= null;
        Console.WriteLine(bA.HasValue);//False

        //引用类型
        string sA = "10";
        string sB = sA;
        sB = "100";//这里新建了一个对象 "100"
        Console.WriteLine(sA);//10
        Console.WriteLine(sB);//100
        testClass clsA = new testClass() { i = 10, str = "10" };
        var clsB=clsA;//新建一个对象clsB,类中所有的值都是和clsA来自同一个引用
        clsB.i = 100;
        clsB.str = "100";
        Console.WriteLine(clsA);//i:100,str:100
        Console.WriteLine(clsB);//i:100,str:100

        Console.ReadLine();
    }
}

public class testClass
{
    public int i;
    public string str;

    public override string ToString()
    {
        return $"i:{i},str:{str}";
    }
}

 

标签:Console,str,C#,知识,类型,引用,WriteLine,整理,100
From: https://www.cnblogs.com/terry841119/p/18616836

相关文章

  • 【comfyui教程】一键更换模特姿势,ComfyUI工作流分享
    前言一键更换模特姿势,ComfyUI工作流分享在创意图像生成领域,ComfyUI正成为一款不可忽视的神器。作为一款专为StableDiffusion设计的基于节点的图形用户界面(GUI),它通过链接不同的模块(称为“节点”)来实现图像生成的高自由度和高度定制化。今天,我们就来分享一个精彩的Comf......
  • C文件概述
    C文件概述   所谓“文件”是指一组相关数据的有序集合。这个数据集有一个名称,叫做文件名。实际上在前面的各章中我们已经多次使用了文件,例如源程序文件、目标文件、可执行文件、库文件(头文件)等。   文件通常是驻留在外部介质(如磁盘等)上的,在使用时才调入内存中......
  • db.msgpack.pas
    db.msgpack.pasunitdb.msgpack;//cxg2024-12-12onlyfordelphiinterfaceusesclasses,SysUtils{$IFDEFUNICODE},Generics.Collections{$ELSE},Contnrs{$ENDIF}{$IFDEFMSWINDOWS},Windows{$ENDIF},Variants;type{$IFRTLVersion<25}IntPt......
  • Java基础知识
    Java基础01.注释注释不会被执行!书写注释是一个非常好的习惯!!!平时写代码一定要注意规范!!Java中的注释有三种:单行注释多行注释文档注释具体操作代码如下:publicclassHelloWorld{publicstaticvoidmain(String[]args){//单行注释:只能注释一行文字......
  • C#知识整理-运算符
    运算符C#提供了许多运算符。其中许多都受到内置类型的支持,可用于对这些类型的值执行基本操作。这些运算符包括以下组:算术运算符比较运算符布尔逻辑运算符位运算符和移位运算符相等运算符 算数运算符以下运算符堆数值类型进行算数运算:++(增量)、--(减量)、+(加)、-(减)、......
  • WPF笔记12——List<T> 与 ObservableCollection<T>
    代码1,使用ObservableCollection<T>:/*优点:(1)使用ObservableCollection<Student>来存储学生数据。在WPF中,ObservableCollection是一个非常适合数据绑定的集合类型。当集合中的元素发生变化(如添加、删除、修改元素)时,它会自动通知UI更新,这符合MVVM模式下视图与视图模型之间......
  • C#知识整理-语句
    申明语句关键字:var,const,refvar关键字申明变量时需要赋值,null值不能作为值赋给const关键字申明的变量不能再进行赋值ref关键字申明表示引用另一个变量,值的改变也跟随引用一起详细可见:stringgreeting="Hello";intx=1,y=2;Li......
  • Linux服务器防火墙的开启,设置访问规则等命令、Docker容器限制IP访问
    服务器检查防火墙状态sudoufwstatus输出Status:inactive表示服务当前处于未激活状态  可以输入sudoufwenable来开启防火墙输出Status:active表示服务当前处于激活状态   可以输入sudoufwdisable来关闭防火墙添加防火墙规则 sudoufwallowf......
  • 恭喜CUUG 11月16日考试的同学获得PG中级/PG高级证书
      恭喜在11月16日参加工信部人才交流中心PostgreSQL管理员PG中级和PG高级认证考试的各位同学,顺利通过了考试,证书在工信人才官网可查。    部分学员证书:       ............    为什么选择工信人才PostgreSQL认证:    发证机构:工信部人才......
  • UT 覆盖率 报告 dotnet-coverage
    安装dotnet-coverage和dotnet-reportgeneratordotnettoolinstall-gdotnet-coveragedotnettoolinstall-gdotnet-reportgenerator-globaltool运行测试,输出XML格式:dotnet-coveragecollect-fxml-ocoverage.xmldotnettest<solution/project>例如:在测试......