C#里面的继承

举个例子:
有一个基类RectangleEx
 1 class RectangleEx
 2   {
 3     private int _x, _y, _w, _h;
 4 
 5     public int x
 6     {
 7       get { return _x; }
 8       set { _x = value; }
 9     }
10     public int y
11     {
12       get { return _y; }
13       set { _y = value; }
14     }
15     public int w
16     {
17       get { return _w; }
18       set { _w = value; }
19     }
20     public int h { get { return _h; } set { _h = value; } }
21 
22     protected Pen _pen;
23 
24     public RectangleEx(int x, int y, int w, int h)
25     {
26       _x = x;
27       _y = y;
28       _w = w;
29       _h = h;
30       _pen = new Pen(Color.Black);
31     }
32 
33     //
34     public virtual void Draw(Graphics g)
35     {
36       g.DrawRectangle(_pen, _x, _y, _w, _h);
37     }
38 
39   }

你可以这样用:
 1       
 2       Graphics g = e.Graphics;
 3       Pen p = new Pen(Color.Blue);
 6 
 7       //use RectangleEx class instance;
 8       RectangleEx rex = new RectangleEx(15153030 );
 9       rex.Draw(g);
10       .

现在需要画一个正方形,可以这样:
1   class Square : RectangleEx
2   {
3     public Square(int x, int y, int w)
4       : base(x, y, w, w)
5     {
6     }
7   }

上面的base就是跟c++的初始化列表一样的用法,C#中调用基类方法时,可以用base关键字

使用:
1 
2       //use square
3       Square sq = new Square(202020);
4       sq.Draw(g);//这里使用了上面的来自PaintEventArgs e 的Griphics对象
5 

这个时候呢,如果我希望有新的派生类,能同时画2个长方形,需要改造Draw()方法(我有两种办法)
第一:我可以,把基类的Draw()方法,变成virtual,然后派生类override它;
第二:我还可以,通过使用new关键字,隐藏基类中的同名方法。
第二种方法是这样的:
 1   class DblRectangleEx : RectangleEx
 2   {
 3     public DblRectangleEx(int x,int y,int w,int h):base(x,y,w,h){
 4       _pen = new Pen(Color.Red);
 5 
 6     }
 7 
 8     private Pen _rPen = new Pen(Color.SeaGreen);
 9 
10    
11     public new void Draw(Graphics g)//使用new关键字,覆盖基类中的同名方法
12     {
13       g.DrawRectangle(_pen, x, y, w, h);
14       g.DrawRectangle(_rPen, x+5, y+5, w, h);
15     }
16 
17     /*
18     public override void Draw(Graphics g)//如果是相同的方法(参数和返回值)只能用override(要求基类声明时用virtual关键字)
19     {
20       g.DrawRectangle(_pen, x, y, w, h);
21       g.DrawRectangle(_rPen, x + 5, y + 5, w, h);
22     }*/
23 
24        
25   }

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

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

相关文章

Vue-Router的路由实例构造配置

可以通过在创建路由实例的时候传入不同的对象来选择不同的配置&#xff0c;这里的’linkActiveClass’代表的是给被激活的<router-link>添加一个叫做’active’的类名&#xff0c;然后我们就可以在css中给被激活标签设置不同的CSS了 其余的还有

uboot中的mmc命令

一&#xff1a;mmc的命令例如以下&#xff1a; 1&#xff1a;对mmc读操作 mmc read addr blk# cnt 2&#xff1a;对mmc写操作 mmc write addr blk# cnt 3&#xff1a;对mmc擦除操作 mmc erase blk# cnt 4&#xff1a;又一次搜索mmc设备 mmc rescan 5&#xff…

对STL的string进行格式化输出

突然遇到需要对一个string类型的变量进行格式化输出&#xff0c;一时不知道怎么做。google了一下&#xff0c;终于找到了答案。 ostringstream os; os < < "abc " < < abc; string s os.str(); 所需头文件&#xff1a;#includ…

WinForm UI设计与开发思路(转)

最近一年来一直在做WinForm相关的系统&#xff0c;对WinForm的UI设计有一些想法想和大家讨论&#xff08;主要是比较忙&#xff0c;所以很多只是设想&#xff0c;还没有开发实例&#xff09; 关于WinUI&#xff0c;理想的情形应该是外观比较cool&#xff0c;能给用户良好的使用…

Vue之父组件向子组件传递数据

1.创建子组件&#xff0c;在src/components/文件夹下新建一个Child.vue 2.Child.vue的中创建props&#xff0c;然后创建一个名为message的属性 3.在App.vue中注册Child组件&#xff0c;并在template中加入child标签&#xff0c;标签中添加message属性并赋值 4.我们依然可以对m…

短信发送接收装置

接到Boss的命令&#xff0c;要求我们做一个在Android手机上运行的小的例子&#xff0c;实现的功能是&#xff1a;通过一个手机向另外一个手机发送数据&#xff0c;另外一个Android手机接收到后通过USB接口输出&#xff01; 该装置主要由三个步骤组成&#xff1a; 1、发信息 2、…

MFC遍历指定目录下的所有文件/文件夹(不遍历子目录)

新建一个C控制台程序&#xff0c;增加对MFC的应用。源代码如下&#xff1a; // TraverseDir.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include <afx.h>#include <iostream>#include <WinBase.h>using namespace std;int _tmain(i…

Vue之实例的生命周期

Vue实例有一个完整的生命周期&#xff0c;也就是从开始创建、初始化数据、编译模板、挂载Dom、渲染→更新→渲染、卸载等一系列过程&#xff0c;我们称这是Vue的生命周期。通俗说就是Vue实例从创建到销毁的过程&#xff0c;就是生命周期 在Vue的整个生命周期中&#xff0c;它提…

十五步骤手把手学会制作网吧XP母盘制作

中国网吧在线 -> 网吧大学 - 技术学院 - 网管技术 - 正文 十五步骤手把手学会制作网吧XP母盘制作 2008-4-9 12:35:05 来源: 中国网吧在线 编辑&#xff1a;陈峰 [网友评论] 第1页&#xff1a;十五步骤手把手学会网吧XP母盘制作第2页&#xff1a;十五步骤手把手学会网吧XP母…

jqury关于cooke的操作写入cookie后只显示一次的DIV提示框代码

有时候当用户登录系统后&#xff0c;需要给用户弹出提示框&#xff0c;但是不需要总是弹出来&#xff0c;在这里加入访问cookie来判断是否弹出过提示框&#xff0c;如果弹出过那么保存cookie&#xff0c;下次根据cookie是否存在来判断是否弹出 <script type"text/javas…

windows遍历目录下所有文件

From: http://blog.csdn.net/benbon/article/details/1911230 在windows中遍历目录下的所有文件主要是使用FindFirstFile和FindNextFile通过递归调用实现的,类似于Linux的opendir和readdir。 在MSDN中&#xff0c;FindFirstFile的声明如下&#xff1a; HANDLE FindFirstFile( …

Vue之计算属性Computed

计算属性将被添加到Vue的实例中。计算属性内部的getter和setter函数内的this上下文将自动地绑定为Vue实例 不应该使用箭头函数来定义计算属性函数 (例如 aDouble: () > this.a * 2)。理由是箭头函数绑定了父级作用域的上下文&#xff0c;所以 this 将不会按照期望指向 Vue …

虚拟机几种网络连接方式的区别

虚拟机&#xff0c;不论是VirtualBox还是VMWare&#xff0c;都提供了几种网络连接方式&#xff0c;其中包括了桥接(Bridged)、网络地址翻译(NAT)和主机模式(Host-only)。 桥接(Bridged)相当于在主机所在的局域网中增加了一台机器&#xff0c;主机和虚拟机的IP地址都是主机所在的…

使用AIR运行另外的程序。

NavigateToURL方法.<?xml version"1.0" encoding"utf-8"?><mx:WindowedApplication xmlns:mx"http://www.adobe.com/2006/mxml"layout"absolute"><mx:Script><![CDATA[import flash.net.URLRequest; pu…

ftw遍历目录树

表头文件&#xff1a;#include <ftw.h>定义函数&#xff1a;int ftw(const char *dir, int (*fn) (const *file, const struct stat *sb, int flag), int depth)函数说明&#xff1a;ftw() 会从参数dir指定的 目录开始&#xff0c;往下一层层地递归式遍历子 目录。ftw()…