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

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace 值类型引用类型
{
class Program
{
static void Main(string[] args)
{
Func<object, string> fnGetType = delegate (object obj)//委托类型
{
var result = "";
if (obj != null)
{
var aa = obj.GetType();
if (aa.IsValueType) result = aa.Name + "该类型是值类型";//是否是值类型,false则为引用类型
else result = aa.Name + "该类型是引用类型";
}
return result;
};
Func<object, string> fnGetType1 = (object obj) =>//既然是委托类型,也同样可以与匿名函数、或者采用Lambda表达式结合使用
{
var result = "";
if (obj != null)
{
var aa = obj.GetType();
if (aa.IsValueType) result = aa.Name + "该类型是值类型";//是否是值类型,false则为引用类型
else result = aa.Name + "该类型是引用类型";
}
return result;
}; int a = ;
string b = "";
char c = '/';
long d = ;
decimal e = 2.00m;
byte f = ;
var g = new Program();
var h = new Student();
Console.WriteLine(fnGetType(a));
Console.WriteLine(fnGetType1(b));
Console.WriteLine(fnGetType(c));
Console.WriteLine(fnGetType1(d));
Console.WriteLine(fnGetType(e));
Console.WriteLine(fnGetType(f));
Console.WriteLine(fnGetType1(g));
Console.WriteLine(fnGetType(h));
Console.ReadKey();
}
}
public class Student
{
public Student() { }
public Student(string name, string sex, int age)
{
Name = name;
Sex = sex;
Age = age;
}
public string Name { get; }
public string Sex { get; }
public int? Age { get; }//值类型才能为空
}
}

控制台运行结果如下图:

总结一下:

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

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

C#中的值类型、引用类型,代码告诉你他是什么类型。的更多相关文章

  1. C#中的值类型和引用类型,深拷贝,浅拷贝

    from https://www.jianshu.com/p/2d27b06e253f 一.C#中的值类型和引用类型 概念 值类型直接存储其值. 引用类型存储对值的引用. 说起来有些拗口,其本质是Va ...

  2. 浅谈C#中的值类型和引用类型

    在C#中,值类型和引用类型是相当重要的两个概念,必须在设计类型的时候就决定类型实例的行为.如果在编写代码时不能理解引用类型和值类型的区别,那么将会给代码带来不必要的异常.很多人就是因为没有弄清楚这两个 ...

  3. 【.Net】浅谈C#中的值类型和引用类型

    在C#中,值类型和引用类型是相当重要的两个概念,必须在设计类型的时候就决定类型实例的行为.如果在编写代码时不能理解引用类型和值类型的区别,那么将会给代码带来不必要的异常.很多人就是因为没有弄清楚这两个 ...

  4. .NET中的值类型与引用类型

    .NET中的值类型与引用类型 这是一个常见面试题,值类型(Value Type)和引用类型(Reference Type)有什么区别?他们性能方面有什么区别? TL;DR(先看结论) 值类型 引用类型 ...

  5. Go语言中的值类型和引用类型

    一.值类型和引用类型值类型:int.float.bool和string这些类型都属于值类型,使用这些类型的变量直接指向存在内存中的值,值类型的变量的值存储在栈中.当使用等号=将一个变量的值赋给另一个变 ...

  6. js 中的值类型和引用类型

    javascript中值类型(基本类型):number,string,bool,undefined,null(这5种基本数据类型是按值访问的,因为可以操作保存在变量中的实际的值) 引用类型:对象(Ob ...

  7. Windows Phone 开发起步之旅之二 C#中的值类型和引用类型

    今天和大家分享下本人也说不清楚的一个C#基础知识,我说不清楚,所以我才想把它总结一下,以帮助我自己理解这个知识上的盲点,顺便也和同我一样不是很清楚的人一起学习下.  一说起来C#中的数据类型有哪些,大 ...

  8. C#中的值类型(value type)与引用类型(reference type)的区别

    ylbtech- .NET-Basic:C#中的值类型与引用类型的区别 C#中的值类型(value type)与引用类型(reference type)的区别 1.A,相关概念返回顶部     C#中 ...

  9. C# 中的值类型和引用类型

    原文 C# 中的值类型和引用类型 值类型(value type):int,long,float,double,decimal,char,bool 和 struct 统称为值类型.值类型变量声明后,不管 ...

随机推荐

  1. C++程序设计实验安排

    2016-2017第二学期C++程序设计的实验时间与地点安排如下表,请大家根据时间按时来上机实验.另外,因为原来安排在4.1的实验因为调休补周一的课,因此挪至周五.另外第4次周六的课,考虑有一些同学有 ...

  2. (转)基于MVC4+EasyUI的Web开发框架经验总结(14)--自动生成图标样式文件和图标的选择操作

    http://www.cnblogs.com/wuhuacong/p/4093778.html 在很多Web系统中,一般都可能提供一些图标的选择,方便配置按钮,菜单等界面元素的图标,从而是Web系统界 ...

  3. (转)Openlayers 2.X加载高德地图

    http://blog.csdn.net/gisshixisheng/article/details/44853881 概述: 前面的有篇文章介绍了Openlayers 2.X下加载天地图,本节介绍O ...

  4. shell脚本操作mysql数据库,使用mysql的-e参数可以执行各种sql的(创建,删除,增,删,改、查)等各种操作

    mysql  -hhostname -Pport -uusername -ppassword  -e  相关mysql的sql语句,不用在mysql的提示符下运行mysql,即可以在shell中操作m ...

  5. LeetCode -- 1038. Binary Search Tree to Greater Sum Tree

    /** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode ...

  6. PAT_A1098#Insertion or Heap Sort

    Source: PAT_A1098 Insertion or Heap Sort (25 分) Description: According to Wikipedia: Insertion sort  ...

  7. HTTP 状态码之:301、302 重定向

    转自:http://www.cnblogs.com/5207/p/5908354.html 概念 301 Moved Permanently 被请求的资源已永久移动到新位置,并且将来任何对此资源的引用 ...

  8. C#第十一节课

    类 using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Thr ...

  9. Java异常以及继承的一些问题

    Java异常以及继承的一些问题 http://blog.csdn.net/hguisu/article/details/6155636 https://www.cnblogs.com/skywang1 ...

  10. tp5 权限设置

    ============================== <?php/** * Created by PhpStorm. * User: 14155 * Date: 2018/11/10 * ...