黑马程序员技术交流社区
标题: 【转】C#中学到的几个重要的关键字 [打印本页]
作者: 陈丽莉 时间: 2013-1-28 19:06
标题: 【转】C#中学到的几个重要的关键字
看到一篇关于C#关键字的文章,感觉挺好的,希望对大家有那么一点点帮助~
-------------------------------------------------以下为正文-------------------------------------------------------------
1.New
先举一个生活中的例子,我们把电脑看做一个类,如果你想买一台电脑的话就要用到New这个关键字,如果你买
的是lenovo牌的电脑就应该这样:电脑 lenovo=new 电脑
如果还要买一台iphone的,那就应该这样啊:电脑 iphone=new 电脑
不管是普通的电脑还是更有档次的iphone电脑,他们都少不了键盘,鼠标,显示屏,电源等,这些都是他们共有的属性
再来说C#,一个包装好了的功能的代码块就可以作为一个类。但是你不能直接使用它,因为面向对象概念中是不允许随便修改类的内容的,所以在C#中想实现这种功能就需要实例化一个类了。就像电脑这个类,如果你想使用的话是完全没有问题的,但是不能私自将电脑的一些基本的性质修改了,比如你不能讲电脑的键盘拿掉。但是你还很固执,认为自己用不上键盘只用鼠标就能满足自己的需要了,这时候你就该实例化了,系统将会给你一个具有电脑通用功能的模型,你自己取个名字 ,以后这个电脑就归你管了,卸键盘,拔掉鼠标,在电脑上弄点装饰品等都可以,但是这都要加到你的实例中,不能加到类中,如果你加到了类中,当别人再去实例化的时候就跟你的电脑一样了,也没有了键盘,那别人想打字该怎么办啊?
不知道这个例子会不会对你理解有所帮助呢?
在C#中,new关键字可用作运算符或修饰符。不过我对修饰符吧、的那部分不理解,下面就给出了对做运算符时
的总结
new运算符
1.用于创建对象和调用构造函数
例:
[html] view plaincopy
- <span style="font-size:18px;">Class_Test MyClass = new Class_Test(); </span>
2.用于为值类型调用默认的构造函数
例:
[html] view plaincopy
- <span style="font-size:18px;">int myInt = new int(); </span>
myint初始化为0,他是int类型的默认值,该语句等同于:int myint=0;
3.不能重载new运算符
4.如果new运算符分配内存失效,则它将引发OutOfMemoryException异常
作者: 陈丽莉 时间: 2013-1-28 19:07
2.Base(base可以完成创建派生类实例时调用其基类构造函数或者调用基类上已被
其他方法重写的方法)
(1).base调用基类构造函数
[html] view plaincopy
- <span style="font-size:18px;">public class A
- {
- public A()
- { Console.WriteLine("Build A"); }
- }
- public class B:A
- {
- public B():base()
- { Console.WriteLine("Build B"); }
- static void Main()
- {
- B b = new B(); Console.ReadLine();
- }
- }
- </span>
[html] view plaincopy
这样一来就可以同时输出BuildA 和BuildB 啦
(2).base调用基类已被重写的方法
[html] view plaincopy
- <span style="font-size:18px;">public class A
- {
- public virtual void Hello()
- {
- Console.WiriteLine("Hello");
- }
- }
- public class B : A
- {
- public override void Hello()
- {
- base.Hello();//调用基类的方法,显示Hello
- Console.WiriteLine("World");
- }
- }</span>
如果程序调用B.Hello()的 话,输出的结果既不是Hello也不是World,而是Hello World啦
3.This(用来解决名称相同的问题)
[html] view plaincopy
- <span style="font-size:18px;">class Employee
- {
-
- public void SetEmpName(string EmpName)
- {
- <span style="color:#ff6666;"> EmpName = EmpName;//这个语句有问题</span>
- }
- private string EmpName; //Employee的成员变量
- }</span>
上诉代码的本意是要将SetEmpName的传入参数EmpName的指指定给Employmentyee类的成员变量EmpName。
但是这样做并没有成功,因为系统并不知道上诉问题语句中的第一个EmpName指的是类成员。这时候就用到了This
关键字,解决方法是将上例中红色的代码修改成:this。EmpName=EmpName
值得注意的是:静态方法中不能使用this
作者: 陈丽莉 时间: 2013-1-28 19:07
本帖最后由 陈丽莉 于 2013-1-28 19:25 编辑
4.override和overload
Override 是在继承的时候,如果你写的函数与要继承的函数函数特征相同,那么,加上这个关键字,在使用这
个子类的这个函数的时候就看不见父类(或超类)的函数了,它被覆盖掉了。
比如:Derived继承了Base,Base里面有void A(int a) ,那么如果你Derived里面觉得A写得不好或不适合这个
类,你想重新再写一遍A里的代码,那么就写override void A(int a)这样,原来的那个函数就被你新写的这个覆盖
掉了。
Overload 是重载,就是说函数名相同,函数特征不同,系统会根据你提供的参数来调相应的函数。
比如:void A(int a)和void A(int a,int b)
如果你用的是A(1)那么调的是第一个,如果是A(1,1)那么调的是第二个。
注意:
- 重写基方法必须与重写方法具有相同的签名。
- 不能重写非虚方法或静态方法。重写基方法必须是虚拟的、抽象的或重写的。
- 也就是说,用 override 修饰符重写的基类中的方法必须是 virtual, abstract 或 override 方法。
- 当类包含两个名称相同但签名不同的方法时发生方法重载
原文链接:http://blog.csdn.net/cjr15233661143/article/details/8546946
作者: 许庭洲 时间: 2013-1-28 19:13
值得学习ing!
作者: 陈丽莉 时间: 2013-1-28 19:16
许庭洲 发表于 2013-1-28 19:13
值得学习ing!
谢谢您的支持~ {:soso_e183:}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |