A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 陈丽莉 金牌黑马   /  2013-1-28 19:06  /  1046 人查看  /  4 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

      看到一篇关于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异常




4 个回复

倒序浏览

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: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

回复 使用道具 举报
值得学习ing!
回复 使用道具 举报
许庭洲 发表于 2013-1-28 19:13
值得学习ing!

谢谢您的支持~    {:soso_e183:}
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马