设计类型

作者: 编程技术  发布:2019-09-24

1.System.Object

4.1独具类型都从System.Object派生

C#的有所种类都是派生自System.Object

负有类型派生自System.Object,有须臾间国有实例方法:
1.Equals:多个对象具备一样值重返true
2.GetHashCode:重临对象值的哈希码。
3.ToString:暗中同意重回类型完整名称(this.GetType().FullName)
   宗旨类型Boolean和Int32重写了该情势。为便于调节和测量试验能够重写重回对象种种字段的值字符串。
4.GetType:重回Type派生的八个对象的实例,建议调用GetType这些指标的项目。

也正是说上面的五个类型定义完全一致

System.Object的GetType方法再次回到的是“类型对象指针”地址,能够推断出真实的类型。

  // 隐式派生自Object    public class Person{    }    {    // 隐式派生自Object    public class Person :Object{    }

从System.Object派生的项目可访谈如下受保险格局:
1.MemberwiseClone:再次回到新实例(与this对象实例字段同样)的援用。
2.Finalize:内部存款和储蓄器回收前会调用此虚方法。回收此前需求试行清总管业的项目应该重写。

System.Object有三个国有措施

Employee e = new Employee("Param1");
CL陆风X8需求创立对象必得用new操作符,new操作符做的职业:
1.图谋类型和基类型全部实例字段须要的字节数。(满含“类型对象指针”和“同步块索引”)
2.它从托管堆中分配必要的字节数,分配对象内存,分配的字节都设为0。
3.初阶化对象“类型对象指针”和“同步块索引”成员
4.调用项目实例构造器,传入实参,起初化实例字段。
new完结以上操作后,重返指向新建对象的引用(指针)

Equals:相比多少个对象的值是不是等于。

4.2类型调换
CL奥德赛允许将对象调换为它的莫过于类型或基类型。
Object o = new EmPloyee(); //转变为基类型
EmPlyee e =(Emplyee)o; //调换为实在类型,有希望倒闭,所以要显得调换。

GetHashCode:再次来到对象的值的哈希值。

使用C#的is和as操作符来转型
is操作符检核对象是或不是相配于钦命的品类,重临Boolean值(is不会抛非凡,对象引用为null重回false);
一般性用法:
if(o is Employee){ //检查叁次
   Employee e = ()o; //再一次检查,判定实际类型,再遍历承继档期的顺序结构实行考察,消耗品质。推荐用as写法
   //在if语句剩余部分使用e
}

ToString:默许重返类型的一体化名称(this.GetType().FullName)。但平日重写该办法来回到字符串(比如bool转换到string)。

as操作符简化写法,并晋级品质。
Employee e = o as Employee; //检查是不是相称,包容重返对象援引,不相配重临null
if(e != null){
  //在if语句中使用e
}
以上只实行了贰次品种校验。上面is校验2次。
as不会抛出卓殊。一般推断是还是不是为null就可以

GetType: 重临调用此方法对象的项目。

 

static void Main(string[] args)        {            Console.WriteLine("Hello World!");            string str = "asd";            int i = 123;            //默认返回类型            Console.WriteLine(str.GetType().FullName);            //将Int转换字符串            Console.WriteLine(i.ToString;                          Console.ReadKey();        }

 4.3命名空间和程序集
命名空间(namespace)客户对有关品种实行逻辑分组,方便定位类型。命名空间可以让项目名称更具独一性。通过using指令,能够差相当少类型前缀减弱输入量。

图片 1

using为项目或命名空间创立别称:
using WintellectWidget=Wintellect.Widget;

暗许重返的是当前项目标完好名称。

注:命名空间和程序集(达成了贰个品类的文本)不肯定是有关的。同二个命名空间中的各类项目或许是在分裂程序聚集完结的。比如,System.IO.FileStream类型在MSCorLib.dll中落到实处,System.IO.FileSystem沃特cher类型在System.dll中完毕。

2.类型转变

 

在事实上中国人民解放军海军事工业程高校业作中有的时候遭遇需求将一体系型转变为另一种档次。C#同意将指标的转变为它的品种或然它的其余基类类型并这种转移方式是安枕无忧能够直接转换。可是将目的调换为它的派生类时,供给出示转变,因为这种转移只怕会在运作时失利。

4.4运作时的互相关系
各类方法的调用前(“序幕”)都会在栈中分配局地变量内部存款和储蓄器并将一些变量最初化(null,0),但访谈未展现早先化局部变量会报错:使用了未赋值的有个别变量。栈是从上到下创设的。

 public class Person{    }  static void Main(string[] args)        {            Console.WriteLine("Hello World!");            string str = "asd";            int i = 123;            //默认返回类型            Console.WriteLine(str.GetType().FullName);            //将Int转换字符串            Console.WriteLine(i.ToString;                  // 不需要显示转换,因为person时Object的派生类            Object o=new Person();            // 需要显示转换,因为personObject的派生类.不强制转换在编译时抛出异常。            Person p=o;            Console.ReadKey();        }

目的包涵:“类型对象指针”(指向类型对象)、“同步块索引”和类型对象(饱含字段和方法表)。

3.类型调换符:is和as

图片 2

那是另一种转移方式。

图中红框部分的情势表示JIT编写翻译(即时编写翻译)的代码。

is:is操作符永久不会抛出特别,只会再次来到true和false。它的来意是反省对象是否在钦命的品种中。

 

 Object o=new Object();            // is 检查当前对象是否属于指定对象            var b1=o is Object;// 返回true            var b2=o is Person;// 返回false            Console.WriteLine;            Console.WriteLine;

 

图片 3

 

is 操作符的平凡用法:

 

  // is 操作符的的通常用法            if( o is Person){                Person p= o;            }

 

在更改时会检查一次对象的类型,第叁回is操作符会检查o是不是属于Emplyoee。借使是则在if语句内部会在检查o是或不是引用了三个Person。为了消除这一个主题素材C#提供了as操作符。

as 垄断符:差异于is,在调换到功时as会重临同三个对象的援引。战败时则会回来NULL。所以只供给检讨变量是还是不是为null就足以了。

图片 4图片 5

 Person p=o as Person;            if(p!=null){                Console.WriteLine("as");            }            // 抛出异常,因为是NULL。            p.ToString();

View Code

图片 6

抛出万分。

为了便利精晓能够给和谐出几道题来考查一下。

本文由贝博体育app发布于编程技术,转载请注明出处:设计类型

关键词:

上一篇:收获类的天性并排除特定属性
下一篇:没有了