• C#中的值类型、引用类型,代码告诉你他是什么类型。


    C#代码告诉你这是什么类型。

     1 using System;
     2 using System.Collections.Generic;
     3 using System.Linq;
     4 using System.Text;
     5 using System.Threading.Tasks;
     6 
     7 namespace 值类型引用类型
     8 {
     9     class Program
    10     {
    11         static void Main(string[] args)
    12         {
    13             Func<object, string> fnGetType = delegate (object obj)//委托类型
    14             {
    15                 var result = "";
    16                 if (obj != null)
    17                 {
    18                     var aa = obj.GetType();
    19                     if (aa.IsValueType) result = aa.Name + "该类型是值类型";//是否是值类型,false则为引用类型
    20                     else result = aa.Name + "该类型是引用类型";
    21                 }
    22                 return result;
    23             };
    24             Func<object, string> fnGetType1 = (object obj) =>//既然是委托类型,也同样可以与匿名函数、或者采用Lambda表达式结合使用
    25             {
    26                 var result = "";
    27                 if (obj != null)
    28                 {
    29                     var aa = obj.GetType();
    30                     if (aa.IsValueType) result = aa.Name + "该类型是值类型";//是否是值类型,false则为引用类型
    31                     else result = aa.Name + "该类型是引用类型";
    32                 }
    33                 return result;
    34             };
    35 
    36             int a = 1;
    37             string b = "1";
    38             char c = '/';
    39             long d = 123;
    40             decimal e = 2.00m;
    41             byte f = 1;
    42             var g = new Program();
    43             var h = new Student();
    44             Console.WriteLine(fnGetType(a));
    45             Console.WriteLine(fnGetType1(b));
    46             Console.WriteLine(fnGetType(c));
    47             Console.WriteLine(fnGetType1(d));
    48             Console.WriteLine(fnGetType(e));
    49             Console.WriteLine(fnGetType(f));
    50             Console.WriteLine(fnGetType1(g));
    51             Console.WriteLine(fnGetType(h));
    52             Console.ReadKey();
    53         }
    54     }
    55     public class Student
    56     {
    57         public Student() { }
    58         public Student(string name, string sex, int age)
    59         {
    60             Name = name;
    61             Sex = sex;
    62             Age = age;
    63         }
    64         public string Name { get; }
    65         public string Sex { get; }
    66         public int? Age { get; }//值类型才能为空
    67     }
    68 }

    控制台运行结果如下图:

    总结一下:

    值类型和引用类型的区别
    所有继承System.Value的类型都是值类型,其他类型都是引用类型。

    引用类型可以派生出新的类型,而值类型不能;
    引用类型存储在堆中,而值类型既可以存储在堆中也可以存储在栈中。
    引用类型可以包含null值,值类型不能(可空类型功能允许将 null 赋给值类型);
    引用类型变量的赋值只复制对对象的引用,而不复制对象本身。而将一个值类型变量赋给另一个值类型变量时,将复制包含的值。
    当比较两个值类型时,进行的是内容比较;而比较两个引用类型时,进行的是引用比较。
    值类型在内存管理方面具有更好的效率,并且不支持多态,适合用作存储数据的载体;引用类型支持多态,适合用于定义应用程序的行为。
    Int[]是引用类型还是值类型
    数组类型是一族类型,它们都继承System.Array,而System.Array继承自System.Object。所以所有的数组类型都是引用类型

    具体详细,可以见博客园 http://www.cnblogs.com/jiajiayuan/archive/2011/09/23/2185966.html

  • 相关阅读:
    多测师讲解html _伪类选择器17_高级讲师肖sir
    多测师讲解html _后代选择器16_高级讲师肖sir
    多测师讲解html _组合选择器_高级讲师肖sir
    多测师讲解html _标签选择器14_高级讲师肖sir
    前端 HTML form表单标签 input标签 type属性 重置按钮 reset
    前端 HTML form表单标签 textarea标签 多行文本
    前端 HTML form表单标签 input标签 type属性 file 上传文件
    前端 HTML form表单标签 input标签 type属性 radio 单选框
    前端 HTML form表单标签 input标签 type属性 checkbox 多选框
    前端 HTML form表单目录
  • 原文地址:https://www.cnblogs.com/huage-1234/p/7364769.html
Copyright © 2020-2023  润新知