C#基础知识之base、this、new、override、abstract梳理

一、Base关键词的几种用法

base重要用于OOP的多态上,base 关键字用于在派生类中实现对基类公有或者受保护成员的访问,但是只局限在构造函数、实例方法和实例属性访问器中

1、base调用基类构造函数

using System;namespace BaseDemo
{class Program{static void Main(string[] args){B b = new B();Console.ReadLine();}}public class A{public A(){Console.WriteLine("Build A");}}public class B : A{public B() : base(){Console.WriteLine("Build B");}}
}

执行结果:

 

2、base在派生类中调用基类的方法

using System;namespace BaseDemo
{class Program{static void Main(string[] args){B b = new B();b.Hello();Console.ReadLine();}}public class A{public virtual void Hello(){Console.WriteLine("Hello");}       }public class B : A{public override void Hello(){base.Hello();}}
}

执行结果:

二、this关键字

1、 this代表当前类的实例对象

using System;namespace thisDemo
{class Program{static void Main(string[] args){A a = new A();a.GetName();Console.ReadKey();}}public class A{private string name = "qxh";public void GetName(){string name = "欢迎你";// this代表A的实例对象// 所以this.name对应的是"qxh"// name对应的是GetName方法内的局部变量Console.WriteLine($" {this.name} - {name}");}}
}

执行结果:

 

2、 用this串联构造函数

using System;namespace thisDemo
{class Program{static void Main(string[] args){A a = new A("qxh");Console.ReadKey();}}public class A{public A(){Console.WriteLine("无参构造函数");}// this()对应无参构造方法A()// 先执行A(),后执行A(string text)public A(string text) : this(){Console.WriteLine(text);Console.WriteLine("有参构造函数");}}
}

执行结果:

 

3、扩展方法

using System;namespace thisDemo
{class Program{static void Main(string[] args){string name = "qxh";Console.WriteLine(name.ShowInfo("欢迎你"));Console.ReadKey();}}/// <summary>/// 必须是静态类/// </summary>public static class A{public static string ShowInfo(this string str, string info){return $"{str}-{info}";}}
}

执行结果:

 

4、索引器:参数可以是int,也可以是string等其他类型

using System;namespace thisDemo
{class Program{static void Main(string[] args){A a = new A();Console.WriteLine(a["qxh"]);Console.ReadKey();}}public class A{public string Name { get; set; }//索引器  []括号里面可以是string,int,array等public string this[string index]{get{if (index == "qxh"){return index;}else{return "gg";}}set{Name = value;}}}
}

执行结果:

 

三、New关键字

1、new 运算符:用于创建对象和调用构造函数

(1)特点

  • new一个class时,new完成了以下两个方面的内容:一是调用new class命令来为实例在托管堆中分配内存;二是调用构造函数来实现对象初始化。

  • new一个struct时,new运算符用于调用其带构造函数,完成实例的初始化。

  • new一个int时,new运算符用于初始化其值为0。

  • new运算符不可重载。

  • new分配内存失败,将引发OutOfMemoryException异常。

(2)demo

static void Main(string[] args)
{A a = new A();//new操作符 创建对象和调用构造函数          Console.ReadKey();
}

2、new 修饰符:new 关键字可以显式隐藏从基类继承的成员

new 关键字可以显式隐藏从基类继承的成员。 隐藏继承的成员时,该成员的派生版本将替换基类版本。 虽然可以在不使用 new 修饰符的情况下隐藏成员,但会生成警告。 如果使用 new 显式隐藏成员,则会取消此警告,并记录要替换为派生版本这一事实。下面是隐藏 A中的Name属性

public class A
{public string Name { get; set; } = "qxh";
}public class B : A
{new public string Name { get; set; } = "dachong";
}

3、new 约束:用于在泛型声明中约束可能用作类型参数的参数的类型

new 约束指定泛型类声明中的任何类型参数都必须有公共的无参数构造函数。如果要使用 new 约束,则该类型不能为抽象类型。当与其他约束一起使用时,new() 约束必须最后指定:

public class A<T>where T : IComparable, new()
{}

四、override关键字

 要扩展或修改继承的方法、属性、索引器或事件的抽象实现或虚实现,必须使用 override 修饰符。 由 override 声明重写的方法称为重写基方法。重写的基方法必须与 override 方法具有相同的签名。不能重写非虚方法或静态方法。 重写的基方法必须是 virtual、abstract 或 override 的。用关键字 virtual 修饰的方法,叫虚方法。可以在子类中用override 声明同名的方法,这叫“重写”。相应的没有用virtual修饰的方法,我们叫它实方法。 

using System;namespace thisDemo
{class Program{static void Main(string[] args){B b = new B();b.Show();Console.ReadKey();}}public class A{public virtual void Show(){Console.WriteLine("A");}}public class B : A{public override void Show(){Console.WriteLine("B");}}
}

执行结果:

五、abstract关键字

  • 用关键字abstract定义的类即为抽象类,且只能作为基类,也不能被实例化。

  • 用abstract定义的类不一定包含抽象方法,也可以包含非抽象方法。

  • abstract定义的方法一定包含在抽象类中。

  • 抽象类不能定义为密封类(sealed),抽象方法不能使用virtual、static、private修饰符

  • 如果派生类没有实现所有的抽象方法,则该派生类也必须声明为抽象类。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/299674.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

班主任老师推荐这些优质的教育号,建议家长们多阅读!

全世界只有3.14 % 的人关注了青少年数学之旅推荐几个教育类学习号让孩子少走弯路&#xff0c;为孩子成长保驾护航&#xff01;长按二维码&#xff0c;选择【识别图中二维码】关注理想父母 lixiangfumu&#xff08;长按二维码识别关注&#xff09;关注理由&#xff1a;面向家长…

【转】ArcGIS.Server.9.2.DotNet的ADF的Toolbar工作过程分析

目的&#xff1a;1.ArcGIS.Server.9.2.DotNet的ADF的Toolbar工作过程原理。开始&#xff1a;Toolbar工作过程&#xff1a;一.初始化过程&#xff08;在页面生成的时候Toolbar控件会生成和它相关的html代码和javascript代码&#xff09;&#xff1a; 1.根据每一个子Tool生成…

学妹问我Java枚举类与注解,我直接用这个搞定她!

很多人问我学妹长什么样&#xff0c;不多说 上图吧&#xff01; 学妹问我Java枚举类与注解&#xff0c;我直接一篇文章搞定&#xff01;一、枚举类① 自定义枚举类② enum关键字定义枚举类③ enum 枚举类的方法④ enum 枚举类实现接口二、注解① 生成文档相关注解②注解在编译…

[转]张孟苏考上的不是大学

原文&#xff1a;http://blog.sina.com.cn/s/blog_4910bb430100a5gy.html 张孟苏考因为助人为乐得到来新加坡读书的机会&#xff0c;作为一个在新加坡生活了十年的人&#xff0c;我向她表示祝贺。但为了对社会负责&#xff0c;对读者负责&#xff0c;我决定写这篇文章。 许多人…

bitmapdata的知识点

flashplayer的cpu渲染 bitmapData占用的内存分两块&#xff0c;一块是原始数据区&#xff0c;另一块是解压后的内存区10秒内如果没有使用这个bitmapdata&#xff0c;解压后的内存区会被释放&#xff0c;当10秒后重新使用&#xff0c;这个bitmapdata会再次解压&#xff0c;所以就…

设计模式之代理

代理模式介绍啥是代理模式&#xff1f;代理模式 是一种结构型设计模式&#xff0c;让你能够提供对象的替代品或其占位符。代理控制着对于原对象的访问&#xff0c;并允许在将请求提交给对象前后进行一些处理。其实说通俗点&#xff0c;就好比我们平时生活中的购买机票&#xff…

PHP 的历史

PHP/FI PHP 继承自一个老的工程&#xff0c;名叫 PHP/FI。PHP/FI 在 1995 年由 Rasmus Lerdorf 创建&#xff0c;最初只是一套简单的 Perl 脚本&#xff0c;用来跟踪访问他主页的人们的信息。它给这一套脚本取名为“Personal Home Page Tools”。随着更多功能需求的增加&#x…

linux主要系统服务介绍

linux主要系统服务介绍 apmd&#xff0d;&#xff0d;apmd用来监视系统用电状态&#xff0c;并将相关信息通过syslogd写入日志。也可以用来在电源不足时关机arpwatch&#xff0d;&#xff0d;用来维护以太网物理地址和ip地址的对应关系atd&#xff0d;&#xff0d;运行用户用at…

轮子,辛苦你了。 | 今日最佳

全世界只有3.14 % 的人关注了青少年数学之旅&#xff08;图源帅哥李坏的朋友圈&#xff0c;侵权删&#xff09;

这次牛逼了,面试字节被问LinkedList原理了!手足无措啊

概述 LinkedList底层是基于链表实现。链表没有长度限制&#xff0c;内存地址不需要固定长度&#xff0c;也不需要是连续的地址来进行存储&#xff0c;只需要通过引用来关联前后元素即可完成整个链表的连续。所以链表的优点就是添加删除元素比较快&#xff0c;只需要移动指针&a…

[WP8.1UI控件编程]Windows Phone自定义布局规则

3.2 自定义布局规则 上一节介绍了Windows Phone的系统布局面板和布局系统的相关原理&#xff0c;那么系统的布局面板并不一定会满足所有的你想要实现的布局规律&#xff0c;如果有一些特殊的布局规律&#xff0c;系统的布局面板是不支持&#xff0c;这时候就需要去自定义实现一…

聊聊编程语言的选择

我适合学什么编程语言呢&#xff1f;大家好&#xff0c;我是鱼皮&#xff0c;今天聊聊编程语言的选择问题&#xff0c;通过对 10 主流编程语言的特点、优劣、应用场景、发展前景等简单分析&#xff0c;希望帮还在迷茫的小伙伴们选择最适合自己的语言去学习。编程语言选择本文大…

IIS6文件权限不对触发了Windows身份认证问题解决方法

今天在iis上调试程序的时候突然发现需要登录: 通过csdn提问得知可能是权限设置有问题于是设置了下internet来宾用户: 结果问题没有解决.后来想想应该不是问题,因为我在自己机器上调试用的是Everyone权限,应该都可以访问. 于是我又去用户管理中重置internet来宾用户密码: 重置In…

C++ Exercises(十五)--排序算法的简单实现

structNode {//队列结点 int data; struct Node* pNext;};classCQueue{//队列类(带头结点&#xff09;public: CQueue(void); ~CQueue(void); bool isEmpty()const;//是否为空 void EnQueue(int num);//入队列 int DeQueue();//出队列 int Front()cons…

朋友圈终于能斗表情包了,会发表情包您就多发点!

全世界只有3.14 % 的人关注了青少年数学之旅今日&#xff0c;微信ios端更新至7.0.9版本&#xff0c;又上了一次微博热搜。版本新增了朋友圈图片评论功能&#xff0c;动态图、静态图均可&#xff0c;点击图片评论即可查看大图&#xff0c;评论图片同步聊天表情包库。各路网友收到…

银行业务调度系统

设计思路&#xff1a; &#xff08;1&#xff09;有三种对应类型的客户&#xff1a;VIP客户&#xff0c;普通客户&#xff0c;快速客户&#xff0c;异步随机生成各种类型的客户&#xff0c;各类型客户在其对应窗口按顺序依次办理业务。 &#xff08;2&#xff09;有三个类。Num…

我已经把它摸的透透的了!!!Spring 动态数据源设计实践,全面解析

[ Spring 动态数据源 动态数据源是什么&#xff1f;它能解决什么&#xff1f;&#xff1f;&#xff1f; 在实际的开发中&#xff0c;同一个项目中使用多个数据源是很常见的场景。比如&#xff0c;一个读写分离的项目存在主数据源与读数据源。 所谓动态数据源&#xff0c;就…

EF Core 异步编程注意要点

????欢迎点赞 &#xff1a;???? 收藏 ⭐留言 ???? 如有错误敬请指正&#xff0c;赐人玫瑰&#xff0c;手留余香&#xff01;????本文作者&#xff1a;由webmote 原创&#xff0c;????作者格言&#xff1a;生活在于折腾&#xff0c;当你不折腾生活时&#x…

AJAX+JavaScript无刷新检查用户名

AJAXJavaScript无刷新检查用户名是否可用2009-04-20 16:26 JavaScript 和 Ajax 代码<script language"javascript" type"text/javascript">var xmlHttp null; function createXMLHttp() { if(window.ActiveXObject) …

Cisco路由器密码恢复

Cisco路由器密码恢复1、必需先用终端方式接CONSOLE口&#xff0c;进入终端状态&#xff1b;2、开路由器电源&#xff1b;3、在60秒内&#xff0c;按Ctrl Break键&#xff0c;中断路由器的启动进程&#xff0c;使其进入ROM监控模式&#xff0c;提示符为"rommon >"或…