c# 基础 object ,new操作符,类型转换

所有类型最终都从System.Object类型派生。

最基本方法(object的公共方法):

1.Equals:如果两个对象具有相同的值,返回true.

2.GetHashCode:返回对象值得一个哈希码,如果某个类型的对象要在一个哈希表集合众作为key使用,该类型应重写该方法。

3.ToSting,返回一个String对象

4.GetType:返回从Typt派生的一个对象实例,指出该对象是什么类型。返回的type对象可以和反射类配合使用,从而获取与对象的类型有关的元数据信息。

以下为受保护的方法

5.MemberwiseClon:非虚方法,能创建类型的一个新实例,并将新对象的实例字段设与this对象的实例字段完全一致,返回的是一个对新实例的一个引用。

6.Finalize:在垃圾回收时会调用该虚方法。

关于new操作符  曹衍涛

Employee e=new Employee("ConstructorParam1");

1.他计算类型及其所有基类型中定义的所有实力字段需要的字节数。 堆上每一个对象都需要一些额外成员——“类型对象指针(type object pointer)

”和“同步索引块(sync block index)”,这些成员由ClR(common language runtime)用于管理对象。这些额外成员的字节数会计入对象大小。

2.他从托管堆中分配制定类型要求的字节数,从而分配对象的内存,分配的所有字节都设为零。

3.他初始化对象的类型对象指针和同步索引成员。

4.调用类型的实例构造器,向其传入在对new的调用中制定的任何实参。(上边ConstructorParam1即为实参)

new执行完这些操作后会返回指向新建对象一个引用(或指针)。上边这个引用会保存到变量e中,后者具有Employee类型

无法显示释放分配给一个对象的内存,CLR采用垃圾回收机制。

类型转换

CLR最重要的特性之一就是类型安全性。

c#可以随意将一个对象转换为他的任何基类,当将该类型转化为他的派生类时需要进行显示转换,该转换可能会在运行时失败。

使用is和as操作符来转型

is检查一个对象是否兼容于指定类型,返回true或false,is操作符不会抛出异常。

Object o=new Object();

Boolean b1 =(o is Object)//返回true

Boolean b2 =(o is Employee)//返回false

如果对象引用为null,总是返回false

is通常这样使用

if(o is Employee)

{

Employee e=(Employee) o;

//在if剩余语句中用e

}

这样写CLR实际检查了两遍数据类型

as为其简化写法

Employee e= o as Employee;

if(e!=null)

{

//剩余语句用e

}

这样写CLR检查o是否兼容Employee,是的话返回同一对象的非null引用。

时间: 2024-10-16 06:04:31

c# 基础 object ,new操作符,类型转换的相关文章

基础语法:操作符

概论 在高级语言最底层,使用运算符来操作数据.在某种程度上,可以将函数.结构体.类等理解为是对运算符和数据的封装及复用. 运算符具有如下特点: 作用于操作数,产生新值.某些运算符还会产生副作用,如改变操作数自身,此类运算符不能作用于常量 不同运算符,其操作数的数据类型不同.几乎所有的运算符仅能操作基本数据类型,而某些运算符还可以操作所有对象. 不同运算符,其操作数的个数不同.根据操作数的个数,运算符可以分为单目运算符.双目运算符和三目运算符 运算符具有优先级.运算符的优先级决定了表达式中各部分的

js操作符类型转换大全(前端面试题之操作符)

操作符运算符,在前端的面试题目中经常出现,很多朋友在对其运算的时候经常出错.说明对操作符运算还没有完全理解,我前面的一篇文章,javascript双等号引起的类型转换,主要讲解双等号引起的类型转换.本篇文章可以说是对这篇文章的补充吧! 首先,我们先来做一些题目吧!为了统一,我不混着来写这些题目,面试题目中,经常将这些题目混起来,这样对你的迷惑度会更大,为了更方便演示,我在这里分模块写了一些题目,大家可以看下! //操作符字符串的隐性转换 //乘法 console.dir("-------以下乘法

java基础学习——18、类型转换与多态

我们之前使用类创造新的类型(type),并使用继承来便利我们创建类的过程.我将在这一讲中深入类型,并介绍多态(polymorphism)的概念. 类型检查 Java的任意变量和引用经过类型声明(type declaration),才能使用.我们之前见过对象数据.类数据.方法参数.方法返回值以及方法内部的自动变量,它们都需要声明其类型.Java是一种强类型(strongly typing)语言,它会对类型进行检查.如果我们错误的使用类型,将造成错误. 类型不符,卖萌无效 比如在下面的Test类中,

LINQ系列:Linq to Object相等操作符

相等操作符通过比较两个序列来检查它们相应的元素是否相同.如果两个序列有相同的元素,并且对应元素的值相同,则认为这两个序列是相等的. SequenceEqual操作符判定两个集合是否相等.判定是通过并行地枚举两个数据源并比较相应元素来完成的.返回值是一个Boolean值——如果两个集合相等则返回true,否则返回false. SequenceEqual 1>. 原型定义 public static bool SequenceEqual<TSource>(this IEnumerable&l

linux命令基础:shell操作符与键盘通配符

通配符 通配符是一类键盘字符 . 当查找文件夹时:当不知道真正字符或者不想键入完整名字时,常常使用通配符代替一个或多个真正字符. *             代替0个或多个字符. ?             代替一个字符. []            匹配中括号内的任意一个字符. 通配符示例: ls *.conf ls /home/*.sh ls h*.conf ls test?.c ls [abc]* shell命令重定向 <                   标准输入,将命令中接收输入的途

LINQ系列:Linq to Object量词操作符

量词操作符返回一个Boolean值,指示序列中是否存在部分或全部元素符号指定条件.LINQ中量词操作符包括:All.Any和Contains. 1. All All操作符判定在集合中是否所有的值都满足指定的条件.返回值是一个Boolean值.如果所有值都满足条件则返回true,否则返回false. 1>. 原型定义 public static bool All<TSource>(this IEnumerable<TSource> source, Func<TSource

2015/8/30 Python基础(4):序列操作符

序列是指成员有序排列,可以通过下标偏移量访问的类型.Python序列包括:字符串.列表和元组.序列的每个元素可以指定一个偏移量得到,多个元素是通过切片操作得到的.下标偏移量从0开始计数到总数-1结束. 序列类型操作符这些操作符是对所有序列类型都适用的. 序列操作符  作用 seq[ind]  获得下标为ind的元素 seq[ind1:ind2]  获得下标从ind1到ind2的元素集合 seq * expr  序列重复expr次 seq1 + seq2  连接序列seq1和seq2 obj in

基础二:操作符

使用Java操作符 操作符接受一个或者多个参数,并生成一个新值. 操作符用于操作数,生成一个新值. 另外有些操作符可能会改变操作数自身的值,这被称为"副作用". 这些能改变操作数的操作符最普遍的作用就是产生副作用. 几乎所有的操作符都只能操作"基本类型". 例外的操作符是 = == 和 != . 这些操作符能操作所有的对象. 除此之外,String类支持 + 和 +=. 优先级 当一个表达式中存在多个操作符时,操作符的优先级决定了各个部分的计算顺序. 最简单的规则就

C++语言基础(24)-四种类型转换运算符(static_cast、dynamic_cast、const_cast和reinterpret_cast)

一.static_cast static_cast 只能用于良性转换,这样的转换风险较低,一般不会发生什么意外,如: #include <iostream> #include <cstdlib> using namespace std; class Complex{ public: Complex(double real = 0.0, double imag = 0.0): m_real(real), m_imag(imag){ } public: operator double(