C#类型(一)
1.System.Object
C#的所有类型都是派生自System.Object
也就是说下面的两个类型定义完全一致
// 隐式派生自Object
public class Person{ }
{
// 隐式派生自Object
public class Person :Object{ }
System.Object有四个公共方法
Equals:比较两个对象的值是否相等。
GetHashCode:返回对象的值的哈希值。
ToString:默认返回类型的完整名称(this.GetType().FullName)。但经常重写该方法来返回字符串(例如bool转换成string)。
GetType: 返回调用此方法对象的类型。
static void Main(string[] args)
{
Console.WriteLine("Hello World!");
string str = "asd";
int i = ;
//默认返回类型
Console.WriteLine(str.GetType().FullName);
//将Int转换字符串
Console.WriteLine(i.ToString()); Console.ReadKey();
}

默认返回的是当前类型的完整名称。
2.类型转换
在实际工作中经常遇到需要将一种类型转换为另一种类型。C#允许将对象的转换为它的(本身)类型或者它的任何基类类型并这种转换方式是安全可以直接转换。但是将对象转换为它的派生类时,要求显示转换,因为这种转换可能会在运行时失败。
public class Person{
}
static void Main(string[] args)
{
Console.WriteLine("Hello World!");
string str = "asd";
int i = ;
//默认返回类型
Console.WriteLine(str.GetType().FullName);
//将Int转换字符串
Console.WriteLine(i.ToString());
// 不需要显示转换,因为person时Object的派生类
Object o=new Person();
// 需要显示转换,因为personObject的派生类.不强制转换在编译时抛出异常。
Person p=(Person)o;
Console.ReadKey();
}
3.类型转换符:is和as
这是另一种转换方式。
is:is操作符永远不会抛出异常,只会返回true和false。它的用意是检查对象是否在指定的类型中。
Object o=new Object();
// is 检查当前对象是否属于指定对象
var b1=o is Object;// 返回true
var b2=o is Person;// 返回false
Console.WriteLine(b1);
Console.WriteLine(b2);

is 操作符的通常用法:
// is 操作符的的通常用法
if( o is Person){
Person p=(Person) o;
}
在转换时会检查两次对象的类型,第一次is操作符会检查o是否属于Emplyoee。如果是则在if语句内部会在检查o是否引用了一个Person。为了解决这个问题C#提供了as操作符。
as 操纵符:不同于is,在转换成功时as会返回同一个对象的引用。失败时则会返回NULL。所以只需要检查变量是否为null就可以了。
Person p=o as Person;
if(p!=null){
Console.WriteLine("as");
}
// 抛出异常,因为是NULL。
p.ToString();

抛出异常。
为了方便理解可以给自己出几道题来测验一下。
C#类型(一)的更多相关文章
- 【.net 深呼吸】细说CodeDom(5):类型成员
前文中,老周已经厚着脸皮介绍了类型的声明,类型里面包含的自然就是类型成员了,故,顺着这个思路,今天咱们就了解一下如何向类型添加成员. 咱们都知道,常见的类型成员,比如字段.属性.方法.事件.表示代码成 ...
- 【.net 深呼吸】细说CodeDom(4):类型定义
上一篇文章中说了命名空间,你猜猜接下来该说啥.是了,命名空间下面就是类型,知道了如何生成命名空间的定义代码,之后就该学会如何声明类型了. CLR的类型通常有这么几种:类.接口.结构.枚举.委托.是这么 ...
- opencv中Mat与IplImage,CVMat类型之间转换
opencv中对图像的处理是最基本的操作,一般的图像类型为IplImage类型,但是当我们对图像进行处理的时候,多数都是对像素矩阵进行处理,所以这三个类型之间的转换会对我们的工作带来便利. Mat类型 ...
- [C#] async 的三大返回类型
async 的三大返回类型 序 博主简单数了下自己发布过的异步文章,已经断断续续 8 篇了,这次我想以 async 的返回类型为例,单独谈谈. 异步方法具有三个可让开发人员选择的返回类型:Task&l ...
- C# - 值类型、引用类型&走出误区,容易错误的说法
1. 值类型与引用类型小总结 1)对于引用类型的表达式(如一个变量),它的值是一个引用,而非对象. 2)引用就像URL,是允许你访问真实信息的一小片数据. 3)对于值类型的表达式,它的值是实际的数据. ...
- salesforce 零基础学习(六十二)获取sObject中类型为Picklist的field values(含record type)
本篇引用以下三个链接: http://www.tgerm.com/2012/01/recordtype-specific-picklist-values.html?m=1 https://github ...
- Dapper逆天入门~强类型,动态类型,多映射,多返回值,增删改查+存储过程+事物案例演示
Dapper的牛逼就不扯蛋了,答应群友做个入门Demo的,现有园友需要,那么公开分享一下: 完整Demo:http://pan.baidu.com/s/1i3TcEzj 注 意 事 项:http:// ...
- ElasticSearch 5学习(9)——映射和分析(string类型废弃)
在ElasticSearch中,存入文档的内容类似于传统数据每个字段一样,都会有一个指定的属性,为了能够把日期字段处理成日期,把数字字段处理成数字,把字符串字段处理成字符串值,Elasticsearc ...
- js:给定两个数组,如何判断他们的相对应下标的元素类型是一样的
题目: 给Array对象原型上添加一个sameStructureAs方法,该方法接收一个任意类型的参数,要求返回当前数组与传入参数数组(假定是)相对应下标的元素类型是否一致. 假设已经写好了Array ...
- C++11特性——变量部分(using类型别名、constexpr常量表达式、auto类型推断、nullptr空指针等)
#include <iostream> using namespace std; int main() { using cullptr = const unsigned long long ...
随机推荐
- SpringBoot vue
springboot 整合vue就行前后端完全分离,监听器,过滤器,拦截器 https://github.com/ninuxGithub/spring-boot-vue-separateA blog ...
- Eclipse中导入项目后js报错解决方法
http://blog.csdn.net/chenchunlin526/article/details/54666882 原因是因为开启了js的校验功能 不影响项目 如需去除错误标志按链接文档操作即可 ...
- 你不知道的JavaScript--Item13 理解 prototype, getPrototypeOf 和__proto__
1.深入理解prototype, getPrototypeOf和_ proto _ prototype,getPropertyOf和 _ proto _ 是三个用来访问prototype的方法.它们的 ...
- django(权限、认证)系统——自定义UserProfile储存User额外信息
上篇文章我们引出了Django内置的权限控制系统,讲了安装,和最核心和基本的User模型的API和其Manager的API. 接下来我们继续深入下去,使用User对象做一些事情,首先当然就是创建一个U ...
- dubbo+zookeeper的使用
我们讨论过Nginx+tomcat组成的集群,这已经是非常灵活的集群技术,但是当我们的系统遇到更大的瓶颈,全部应用的单点服务器已经不能满足我们的需求,这时,我们要考虑另外一种,我们熟悉的内容,就是分布 ...
- 【BAT面试题系列】面试官:你了解乐观锁和悲观锁吗?
前言 乐观锁和悲观锁问题,是出现频率比较高的面试题.本文将由浅入深,逐步介绍它们的基本概念.实现方式(含实例).适用场景,以及可能遇到的面试官追问,希望能够帮助你打动面试官. 目录 一.基本概念 二. ...
- 基于SpringBoot从零构建博客网站 - 整合lombok和mybatis-plus提高开发效率
在上一章节中<技术选型和整合开发环境>,确定了开发的技术,但是如果直接这样用的话,可能开发效率会不高,为了提高开发的效率,这里再整合lombok和mybatis-plus两个组件. 1.l ...
- PoiDocxDemo【Android将表单数据生成Word文档的方案之二(基于Poi4.0.0),目前只能java生成】
版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 这个是<PoiDemo[Android将表单数据生成Word文档的方案之二(基于Poi4.0.0)]>的扩展,上一篇是根 ...
- python接口自动化(十七)--Json 数据处理---一次爬坑记(详解)
简介 有些 post 的请求参数是 json 格式的,这个前面发送post 请求里面提到过,需要导入 json模块处理.现在企业公司一般常见的接口因为json数据容易处理,所以绝大多数返回数据也是 j ...
- MySQL 复制 - 性能与扩展性的基石 1:概述及其原理
1. 复制概述 MySQL 内置的复制功能是构建基于 MySQL 的大规模.高性能应用的基础,复制解决的基本问题是让一台服务器的数据与其他服务器保持同步. 接下来,我们将从复制概述及原理.复制的配置. ...