c# 值类型实例构造器

引用类型包含值类型字段,引用类型初始化后,值类型默认会被初始化为0、Null。
CLR允许为值类型定义构造器,但是构造器的调用,就必须显式的写代码来调用它们。

CLR不允许为值类型定义无参构造器。只能定义有参构造器,并且构造器中必须为值类型中的所有字段全部赋值,否则报错。

c#中虽然没有无参构造器,但是可以使用这个语法初始化在内部的字段:

StructType st = new StructType();//为内部字段初始化0或者null

所以对定义有参构造器的参考写法:


代码如下:

public StructType(int x){ //定义有参构造器
this = new StructType();//将所有的字段初始化为0或者Null
m_x = x;//用参数x覆盖m_x字段,m_x已被上句话初始化为0
}

(0)

相关推荐

  • 浅谈PHP与C#的值类型指向区别的详解

    PH和C#的值拷贝区别(如果哪里说的不对,还望指出!)$a = 2;$b = $a;  //在php中这里把b的地址指向a 所以b此时也等于2:区别就在这$a = 5; //这时php中a的值又重新写值,所以php核心这时才会把b重新分配一个地址,然后把a原先的值进行拷贝.这就是 写时拷贝 原理 , 也就是说,除非进行写操作,否则值类型就是指向一个地址.而C#中.值类型的复制.永远都是新建一个地址 如:int a = 2;int b = a;  //此时不管有没有进行a的二次写入..NET都会把

  • c#字符串值类型与引用类型比较示例

    复制代码 代码如下: classProgram{    staticvoid Main() {        int a = 9;    //给变量a赋值为9        int b = a;   //将a的副本给变量b        b = 10;        Console.WriteLine(string.Format("a={0},b={1}", a, b));        Person ZS = newPerson();       //张三        ZS.Age

  • 浅谈C# 中的可空值类型 null

    C# 不允许把 null 赋给一个值类型的数据.在 C# 中,以下语句是非法的: 复制代码 代码如下: int a = null;    // 非法 但是,利用 C# 定义的一个修饰符,可将一个变量声明为一个可空(nullable)值类型.可空值类型在行为上与普通值类型相似,但可以将一个 null 值赋给它.如下所示: 复制代码 代码如下: int? a = null;      // 合法 当把一个变量定义为可空值类型时,该变量依然可以被赋值为 0,代码如下所示: 复制代码 代码如下: usi

  • C#引用类型和值类型的介绍与实例

    复制代码 代码如下: static void Main(string[] args)        {            //值类型            bool b1 = true;  //栈中划一块内存,名字为b1,类型为bool,值为true            Console.WriteLine("b1="+b1);  // b1 =true bool b2 = b1;    //栈中划一块内存,名字为b2,类型为bool,和b1的值一样为ture           

  • c#值类型和引用类型使用示例

    在刚参加工作面试时,我们经常会遇到有关值类型和引用类型的问题,你回答的怎么样直接影响你在别人心目中的印象,你回答的不好说明你对C#没有深入的了解学习,今天我带大家回顾下C#中的引用类型和值类型.CLR支持两种类型:引用类型和值类型.虽然FCL中大多数类型都是引用类型但程序中用的最多的还是值类型.引用类型总是从托管堆上分配的,C#的new操作会返回对象的内存地址--也就是指向对象的数据的内存地址.设想假设每次使用一个Int32值时,都进行一次内存分配,性能会受到多大的影响,为了提升简单.常用的类型

  • C#中值类型和引用类型的区别深度分析

    本文通俗易懂的分析了C#中值类型和引用类型的区别.分享给大家供大家参考.具体分析如下: 似乎"值类型和引用类型的区别"是今年面试的流行趋势,我已然是连续三次(目前总共也就三次)面试第一个问题就遇到这个了,这是多大的概率啊,100%,哈哈,我该买彩票去! 言归正传,咱还是先来探讨探讨这二者之间有什么区别吧.记得有一次电话面试中,我直接跟面试官说:"值类型是现金,引用类型是存折",后来想想当时说这话虽是有点儿冲动地脱口而出,但也没什么不妥.我这人不善于背理论的教条,喜欢

  • c# 引用类型与值类型的区别详解

    解析:CLR支持两种类型:值类型和引用类型.用Jeffrey Richter(<CLR via C#>作者)的话来说,"不理解引用类型和值类型区别的程序员将会把代码引入诡异的陷阱和诸多性能问题".这就要求我们正确理解和使用值类型和引用类型.值类型包括C#的基本类型(用关键字int.char.float等来声明),结构(用struct关键字声明的类型),枚举(用enum关键字声明的类型):而引用类型包括类(用class关键字声明的类型)和委托(用delegate关键字声明的特

  • C#值类型和引用类型的深入理解

    从概念上看,值类型直接存储其值,而引用类型存储对其值的引用.这两种类型存储在内存的不同地方.在C#中,我们必须在设计类型的时候就决定类型实例的行为.这种决定非常重要,用<CLR via C#>作者Jeffrey Richter的话来 说,"不理解引用类型和值类型区别的程序员将会给代码引入诡异的bug和性能问题(I believe that a developer who misunderstands the difference between reference types and

  • c# 引用类型和值类型

    CLR支持两种类型:引用类型和值类型. 引用类型总是从托管堆上分配的. c#中的New操作符返回对象的内存地址. 引用对象的注意点: 1.内存从托管堆中分配 2.堆上分配对象,有一些额外的操作,影响一些性能的 3.从托管堆中分配一个对象时,可能强制执行一次垃圾回收. CLR中的值类型是轻量级的.不需要提领一个指针,不需要垃圾回收,可以减少垃圾回收的次数. 在CLR中一般称为"类"的都是引用类型,所有的值类型都称为结构或者枚举. 所有的结构都是抽象类ValueType的直接派生类.Val

  • c# 值类型实例构造器

    引用类型包含值类型字段,引用类型初始化后,值类型默认会被初始化为0.Null. CLR允许为值类型定义构造器,但是构造器的调用,就必须显式的写代码来调用它们. CLR不允许为值类型定义无参构造器.只能定义有参构造器,并且构造器中必须为值类型中的所有字段全部赋值,否则报错. c#中虽然没有无参构造器,但是可以使用这个语法初始化在内部的字段: StructType st = new StructType();//为内部字段初始化0或者null 所以对定义有参构造器的参考写法: 复制代码 代码如下:

  • php mysqli查询语句返回值类型实例分析

    本文实例分析了php mysqli查询语句返回值类型.分享给大家供大家参考,具体如下: <?php $link = new mysqli('localhost', 'root','123','test'); $sql = 'select uName from userInfo'; $a = $link->query($sql); echo '<pre>'; echo '有结果集<br>'; var_dump($a); echo '</pre>'; $sql

  • PowerShell函数指定返回值类型实例

    本文介绍在自定义PowerShell函数时,如何设置返回值的数据类型.PowerShell函数的返回值可以有类型,也可以没有类型,跟输入参数相似.     定义PowerShell函数的返回值类型,要使用OutputType这个指令.将这个指令放到param指令之前即可实现对返回值类型的定义. 复制代码 代码如下: function Test-IntelliSense {     [OutputType('System.DateTime')]     param()     return Get

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

    一.基本概念 C#只有两种数据类型:值类型和引用类型 值类型在线程栈分配空间,引用类型在托管堆分配空间 值类型转为引用类型称成为装箱,引用类型转为值类型称为拆箱 以下是值类型和引用类型对照表 从上图可以简单看出:string,Object,数组,class是引用类型,简单类型,枚举,结构是值类型. 二.代码展示 定义一个类和结构调用赋值 内存分配情况如下图: 从这张图可以看出,class实例化出来的对象,指向了内存堆中分配的空间:truct实例化出来的对象,是在内存栈中分配. 修改代码如下: 内

  • c#基础系列之值类型和引用类型的深入理解

    前言 不知不觉已经踏入坑已10余年之多,对于c#多多少少有一点自己的认识,写出来渴求同类抨击,对自己也算是个十年之痒的一个总结. C#把数据类型分为值类型和引用类型 1.1:从概念上来看,其区别是值类型直接存储值,而引用类型存储对值的引用. 1.2:这两种类型在内存的不同地方,值类型存储在堆栈中,而引用类型存储在托管对上.存储位置的不同会有不同的影响. 下面话不多说了,来一起看看详细的介绍吧 基本概念 CLR支持两种类型:值类型和引用类型. 面试过很多5年左右的同学,有很多连值类型和引用类型的基

  • c#中值类型和引用类型的基础教程

    前言 值类型和引用类型,是c#比较基础,也必须掌握的知识点,但是也不是那么轻易就能掌握,今天跟着老胡一起来看看吧. 典型类型 首先我们看看这两种不同的类型有哪些比较典型的代表. 典型值类型 int, long, float, double等原始类型中表示数字的类型都是值类型,表示时间的datatime也是值类型,除此之外我们还可以通过关键字struct自定义值类型. 典型引用类型 原始类型中,array, list, dictionary, queue, stack和string都是引用类型,除

  • ASP.NET堆和栈一之基本概念和值类型内存分配

    ".NET的堆和栈"系列: ASP.NET堆和栈一之基本概念和值类型内存分配 ASP.NET堆和栈二之值类型和引用类型参数传递和内存分配 ASP.NET堆和栈三之引用类型对象拷贝和内存分配 ASP.NET堆和栈四之对托管和非托管资源垃圾回收和内存分配 当我们对.NET Framework的一些基本面了解之后,实际上,还是很有必要了解一些更底层的知识.比如.NET Framework是如何进行内存管理的,是如何垃圾回收的......这样,我们才能写出更高性能的程序. 在.NET Fram

  • Java泛型映射不同的值类型详解及实例代码

    Java泛型映射不同的值类型详解 前言: 一般来说,开发人员偶尔会遇到这样的情形: 在一个特定容器中映射任意类型的值.然而Java 集合API只提供了参数化的容器.这限制了类型安全地使用HashMap,如单一的值类型.但如果想混合苹果和梨,该怎样做呢? 幸运的是,有一个简单的设计模式允许使用Java泛型映射不同的值类型,Joshua Bloch在其<Effective Java>(第二版,第29项)中将其描述为类型安全的异构容器(typesafe hetereogeneous Containe

  • js中获取jsp表单中radio类型的值简单实例

    1.问题的引出: 我们经常需要在js中使用ajax向后台发送请求,在这之前我们需要搜集所需的Form表单参数, 我常常会如此解决,简单省事: // editBasicDataObjectForm 为 form的id,data的形式为 name1=val1&name2=val2&name3=val3&..... var data = $("#editBasicDataObjectForm").serialize(); 但在一次我需要单独获得表单中radio类型的字

随机推荐