abstract:抽象类:他表达对问题或者实际中的事物,对象等所设计出的抽象概念,比如一个灵感、生物等,这些都是抽像,但是他们往往也有具体的指向,比如生物圈有人类,猴子,老虎等等,老虎和人类是实际存在的,但是生物是抽象的,在C#中抽象类往往就是表达一个实际存在的事物指向的概念对象,但是抽象的访问修饰必须是public,不管是类还是方法或者属性,比如创建一个抽象类生物,而人类这个实际存在的事物就可以被认为是他的子类,子类可以继承父抽象类,但是必须加override(重载)去实现抽象类的属性或者方法,如果不加override则子类-人类则必须是抽象类,这样人类也是当做一个抽象概念去实例化,而人类的子类可以是白种人,黄种人等等。。这取决于对事物的探讨深度。
namespace 抽象类
{public abstract class Biological{public int Height { get; set; }//定义一个高度(生物具有的基本属性)public int Weight { get; set; }//定义一个重量public string Sex { get; set; }//定义性别
    }public class Human:Biological//子类人类继承了父抽象类
    {//人类有身高和体重(此处列举了一个身高180厘米体重155斤的男性人类)public override int Height {get { return Height;}set { Height = 180; }            }public override int Weight{get { return Weight;}set { Weight = 155; }}public override string Sex {get { return Sex; }set { Sex="男性"; }}}
}
as类型转换与is类型转换判断:

C#的类型转换是as,但是提到类型转换不得不说到一个关键字is,is看起来和as差不多但是真正的含义却相差甚远,is是检查一个对象是否兼容与其他的属性并且永远返回的值是一个Bool值,如果一个对象是某个类型或是其父类型的话就返回为true,否则的话就会返回为false,他不会抛出异常。现在来看看在winform中的is关键字用法案例namespace is关键字
{public partial class Form1 : Form{public Form1(){InitializeComponent();}private void Form1_Load(object sender, EventArgs e){Object obj = new Object();//实例化基类            if (obj is Label)//此时的Label是类型而不是标签
            {MessageBox.Show("类型转换失败");}else{MessageBox.Show("类型转换成功");}}}
}
运行结果是类型转换成功!所以is只是做类型兼容判断,并不执行真正的类型转换。返回true或false,
不会返回null,对象为null也会返回false,但是is可以做值类型的转换判断,而as则不可以!切记!
而as是将对象转换成我们所需要的对象,比如一个黄红人可以转化成黑种人(晒黑就行了)这个只是个举
例,as不会抛出异常,但是如果结果为空的话会抛出NullReferenceException异常,正常情况下会直接返
回转换结果,这是与is的最根本区别!但是!as转换类型是必须转换的对象是被转换对象类型的派生类,
现在来看看在winform中的as关键字用法案例
namespace as关键字
{public partial class Form1 : Form{public Form1(){InitializeComponent();}private void Form1_Load(object sender, EventArgs e){Object obj = new Object();//实例化基类Label label = obj as Label;//将基类转换成label标签类if (label == null){MessageBox.Show("类型转换失败");}else{MessageBox.Show("类型转换成功");}}}
}
程序运行会提示类型转化失败,当然,基类怎么可能转换成label类,你让一个鸡转换为一个蛋那怎么行
呢。is与as的比较就是这样,as更高效也更安全,推荐尽可能的使用as关键字去转换类型,而不是一个括
号加类型:()……这样去转换!这就是is与as关键字

转载于:https://www.cnblogs.com/sandaman2019/p/10414986.html

C#关键字详解第一节相关推荐

  1. C#关键字详解第二节

    base:基类 在有些书中base的解释为表示父类,没错,base可以表示父类,但我更想理解成基类,因为更原始更具象,既然是类,那么他就符合面向对象的设计规则和特点,我们知道面向对象的三个特点是封装, ...

  2. C#关键字详解第五节

    最近有点忙于追剧<人民的名义>所以并未及时更新,所以大家理解理解,哈哈,这部剧很不错!推荐大家去看看!下面我们继续C#关键字解释!const:常量 一般我们说常量都是以PI(3.14)等举 ...

  3. const 关键字详解

    const 关键字详解 一.const关键字简介 二.const的用法 1.修饰局部变量.全局变量以及字符串常量 2.修饰指针 3.修饰函数的参数 4.修饰函数的返回值 5.const成员函数(C++ ...

  4. Delphi 关键字详解[整理于 橙子 的帖子]

    Delphi 关键字详解[整理于 "橙子" 的帖子] absolute //它使得你能够创建一个新变量, 并且该变量的起始地址与另一个变量相同. var Str: string[3 ...

  5. C++ explicit关键字详解(用于构造函数)

    C++ explicit关键字详解(用于构造函数) C++提供了关键字explicit,可以阻止不应该允许的经过转换构造函数进行的隐式转换的发生.声明为explicit的构造函数不能在隐式转换中使用. ...

  6. Java中super关键字详解

    Java中super关键字详解 super有什么用? super什么时候不可以省略呢? super在内存图中是如何存在的呢? super使用时的注意事项 super有什么用? (1)当子类中构造方法第 ...

  7. Java static静态关键字详解(public、 private、 volatile)

    文章目录 前言 static要解决什么问题? 格式 特点 static静态变量 静态变量和实例变量的区别 static静态方法 static应用场景 static 与volatile static如何 ...

  8. c语言关键字extern作用,C语言中extern关键字详解

    <C语言中extern关键字详解>由会员分享,可在线阅读,更多相关<C语言中extern关键字详解(5页珍藏版)>请在人人文库网上搜索. 1.C 语言中 extern 关键字详 ...

  9. synchronized 关键字详解

    synchronized关键字详解 文章目录 synchronized关键字详解 一.synchronized简介(是什么) 用户态和内核态: 二.synchronized应用(怎么用) 修饰实例方法 ...

最新文章

  1. POJ 3669 Meteor Shower
  2. Java-ThreadLocal三种使用场景
  3. RecyclerView局部刷新机制——payload
  4. android sdk方法隐藏_每个Android开发都必须知道的利器
  5. JUnit 4和JUnit 5区别
  6. 语音网关典型配置实例
  7. linux  指令 备注
  8. IIS7.0 Url Rewrite
  9. Vbs脚本编程简明教程之十五
  10. 关于gite代码提交不显示绿格子的处理心得git
  11. csp是什么比赛_CSP-J/S认证 NOIP、NOI信息学竞赛解读!
  12. 彻底解决联想手机数据连接不能上网问题(无需恢复出厂设置) 本文来自移动叔叔论坛 ,详细出处请参考:http://bbs.ydss.cn/thread-201115-1-1.html
  13. 最热门的旅游目的地:1971年至2011年
  14. 【Python笔记】pyqt5进度条-多线程图像分块处理防止窗体卡顿
  15. 希尔顿集团旗下品牌希尔顿启缤精选酒店在河北廊坊正式开业
  16. 导航栏保持居中并使用swiper作为轮播图进行背景轮播背景
  17. oracle导出一半报1046,Oracle 数据库1046事件
  18. php简单的商城系统,DouPHP轻量级商城管理系统
  19. 基于权证交易、隐私保护模型的社交概念产品设计
  20. SAP - 表、业务流程

热门文章

  1. Ansible 起步指南
  2. citrix+netscaler配置第一次培训
  3. VirtualBox 安装 Ubuntu 14.10 花屏 解决方案
  4. delete容易出错的地方
  5. gradle 项目打包成多个jar包_自从用完 Gradle 后,有点嫌弃 Maven 了!
  6. r中gglot怎么组合多张图_最终版本Science级组合图表绘制
  7. iphone7无服务_iphone7无服务无信号怎么办
  8. linux系统while循环,linux命令:while循环(示例代码)
  9. linux 主机名修改日志,Linux:修改主机名【Centos7】
  10. linux查看svn信息,SVN 查看历史信息