C#学习笔记和年轻真好 08/01/19

控件编程看着看着,还是觉得不放心,总觉得还有东西没掌握好,不能直接跳到下一步去。于是又找了一本新书,重新看面向对象编程的部分。这次的书是《C# Design Patterns: A Tutorial》的中译本。前面提到的那本《Programming C#》感觉写得不是很好,很多地方都讲得不够深入,所以打算不继续往下看了。

在C#中,变量与函数的继承可以分成两种形式:
一 派生类中没有再次声明基类中的变量或函数
此时,派生类能否访问这个成员要看这个成员访问权限是private还是protected/public。如果是前者,那么"base.成员"这样的访问会使编译器报错,而如果是后者,则可以使用"base.成员"的方式访问该成员。

二 派生类中声明了一个与基类中所含成员同名的成员
一般情况下,编译器是会报错的,因为它无法得知你这么写到底是出于什么目的。这时候可以采用两种具体的解决办法。
a 给这个派生类中的成员加上new修饰符。
这样做的意思是,这个成员和基类中的成员是互不相干的。也就是说,"基类.成员"和"派生类.成员"会指向两个不同的成员。同时,在派生类中,将无法使用"base.成员"这样的方式对基类中的成员进行访问。
b 给这个派生类中的成员加上override修饰符。
这样做的意思是,这个成员将覆盖掉基类中的同名成员。这时,"基类.成员"和"派生类.成员"都将指向派生类中的那个成员,但在派生类中,可以使用"base.成员"来访问基类中的成员。

但 需要注意的是,函数的情况有点特殊。如果要给一个派生类中的函数加上override修饰符,会比给变量加上override修饰符多出一个条件,那就是 要求基类中的函数有virtual修饰符。如果这个条件不满足,那么编译器会报错。也就是说如果基类中的函数没有virtual修饰符,而你又想对它进行 改写,那么就只能使用new修饰符来修饰派生类中的函数。但因为此时不能在派生类中使用"base.该函数"的方式调用基类的函数,所以,等于是要在派生 类中将该函数整个重写一遍。

然后介绍一种可以限制类成员数量的技巧:
一个类如果只有一个无参数且private的构造函数,那么我们就不能采用通常的方法创建这个类的对象。
假设有一个类PrivateConstructor符合上面的情况,那么PrivateConstructor pc = new PrivateConstructor();就是一个会产生编译错误的语句。
创建这种类的对象的方法只有一个,那就是为这个类提供一个静态的public函数,在这个函数里调用类的private构造函数,然后将生成的对象返回。
于是对于上面的例子,创建对象的语句可以改成:PrivateConstructor pc = PrivateConstructor.StaticConstructor();
这样一来,我们就可以在这个类中再添加一个静态变量用来存储类对象的数量,然后在这个静态public函数中添加判断语句。一旦类对象的数量达到上限,那么,就不再调用privite构造函数生成新的对象。

最后要说的是控件的事件处理函数。
Windows控件的事件处理函数是可以由程序员自行定义的,比如要定义一个在窗体上的名为pic的图片控件的绘图事件处理函数:
this.pic.Paint += new PaintEventHandler(this.pic_Paint);
括号中的this.pic_Paint是一个用户自定义函数,这个函数可以放在Form类中,并设为private。
使用这样的名字只是约定俗成的缘故,你也可以写成:
this.pic.Paint += new PaintEventHandlder(drawPicture);
这样Form类中就需要一个名为drawPicture的函数。
赋值号右边new出来的是一个事件句柄(EventHandler),似乎还存在着其他不同的事件句柄。
但是否允许事件处理函数重载还不清楚,因为显然在这个添加事件处理函数的语句中,只有函数名作为参数传递给了事件句柄的构造函数。如果我定义两个同名但参数不同的事件处理函数不知道会产生什么结果。

接口暂时先放一放,用来实现多重继承的玩意儿目前大概也不会用到。下面倒是要先看看String和Array这两个系统提供的类。

==============以下是内容不涉及编程================
在CSDN论坛上混的都不是鸟了。
今天看到一个高中毕业的少年人,在论坛上发帖找人一起翻译英文教程,结果招致众人的狂喷。
厄,其实我点进那贴是因为想参与翻译的,看到这么多人在喷,确实有点吃惊。不过是翻译个东西,为什么要喷呢?然后仔细看跟贴,发现喷的原因主要有这么几个:

1 私自翻译是违法的,楼主就一法盲。
2 楼主高中文化,看外文书还要用金山词霸,自己本身又是刚开始学C#,翻出来的东西估计是误人子弟。
3 现在翻译哪个不收费,楼主想靠热血来做事真是幼稚可笑。

嗯,怎么说呢。这个,年轻真好。
所以如果不趁现在热血正盛的时候好好做点事情的话,等再长点岁数,等到不再是鸟的时候,有些事情就做不出来了。
在瑞士这几年怎么说也要做个露点的游戏吧 =3= 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值