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了 其余的还有

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…

Vue之实例的生命周期

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

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 …

关于用display:table让元素居中的小结

让元素垂直居中有一种简单的方法:给需要居中的元素用一个父级包起来&#xff0c;并给父元素添加样式’display&#xff1a;table’,同时给这个父级设置好高度,再给需要居中的元素一个display&#xff1a;table-cell,vertical-align:middle;这样被设置的元素就可以做到垂直居中 …

谷歌联合 Adobe 发布 Noto 字体【免费下载】

Noto 涵盖了世界上所有主要语言&#xff0c;包括欧洲&#xff0c;非洲&#xff0c;中东&#xff0c;印度语&#xff0c;南亚和东南亚&#xff0c;中亚&#xff0c;美洲和东亚语言。也支持几个少数民族和历史语言。不久前&#xff0c;还发布了针对文、日文、韩文的开源字体——N…

5月8日全国软考办专家做客51CTO谈:软考政策、考前复习方法及考场技巧

访谈实录>>软考专家访谈实录之一&#xff1a;分数线和通过率是如何确定的&#xff1f;软考专家访谈实录之二&#xff1a;今年的试题会增加难度吗&#xff1f;软考专家访谈实录之三&#xff1a;论文应考秘笈2008年上半年全国软考时间&#xff1a;5月24日、25日。软考临近&…

Vue之引用DOM的ref属性

ref 被用来给DOM元素或子组件注册引用信息。引用信息会根据父组件的 $refs 对象进行注册。如果在普通的DOM元素上使用&#xff0c;引用信息就是元素; 如果用在子组件上&#xff0c;引用信息就是组件实例 注意&#xff1a;只要想要在Vue中直接操作DOM元素&#xff0c;就必须用r…

Vue之$nextTick属性

因为Vue中DOM的更新是异步的&#xff0c;所以一般涉及到DOM的操作都会放在nextTick函数的回调中去执行 将回调延迟到下次 DOM 更新循环之后再执行。在修改数据之后立即使用它&#xff0c;然后等待 DOM 更新之后执行回调。它跟全局方法 Vue.nextTick 一样&#xff0c;不同的是回…

小程序input实现数据双向绑定

小程序input实现数据双向绑定最终效果index.wxmlindex.js最终效果 index.wxml <view class"uploader"><input type"number" style"border: 2rpx solid #666;" bindinputinputChange data-namepeopleNumber placeholder"输入人数&…