学习的点点滴滴

    学习过了C#的基本属性函数后,接下来的学习我觉得比较重要。C#是一种面向对象的语言,下面复习一下面向对象中的一些名词。     类:把一些系列东西,把他们的共同的属性和方法抽象出来,给他起一个名字就是XXX类。类中定义的静态的就是属性 ,动态的方法就是功能 。

    对象:凡是能够看得见摸得着的东西就是对象,说白了就是某个类里面的一个具体的东西(成员)。在现实生活中是先有对象再有类的,万物皆对象。。但是在程序里是先有类再有对象的。C#是面向对象编程的,在程序中,一切运行的基本单位都是对象。类的定义格式:[访问修饰符] class 类名 {//类体  } 在程序里面有且只能有一类包含Main方法,这个类称之为主类。    

   int,byte,long都是一个数据类型---整数类型,class也是一个数据类型--类类型,interface是一个数据类型但他是接口类型。本身类就是一个数据类型---类类型,有这个类定义的对象是这个类型的变量。      

    创建对象过程是:就是把类里面所有的东西赋值一份,放到对象的内存空间中。那么对象方式属性和方法是自己内存空间中的。一个类可以创建n个对象,那么n个对象之间是没有任何的关系,唯一是他们产生于一个类。 类创建对象的格式如:

                      类名 对象名 = new 类名();     

类中的属性是对成员变量的一个封装,使得这个变量具有了读和写的权利。一般情况下,成员变量是私有类型,只能在类的内部使用。一般情况,属性都是用public来修饰。如果在类的外面使用,则应该把成员变量封装成属性。格式如下:    

        public 类型 属性名    

        {  get{return 成员变量;}  

           set{成员变量=value;}

        }    

访问修饰符一般有public和private,其中public:共有的,在哪里都能够用的方法;private:私有的,只能在类的内部使用,也就是对象的内存空间中使用。由private定义的变量和方法,对象不能够直接对其调用。但是可以通过间接来访问。    

       注意:以后我们所说的对象,成员和实例都代表一个意思,也就是 对象===成员===实例,从而可知:成员的变量=实例的变量=对象的变量,不难知道成员方法=成员函数=成员功能,成员方法的书写格式如下:    

             [访问修饰符] 返回值 函数名(参数列表) { }    

    构造函数是用来创建对象的。构造函数开辟出一个内存空间,这个空间放在堆里面。此时,对象就指向了这个内存空间,然后类里面的东西复制到这个空间中。构造函数是一个特殊的函数,没有返回值,构造函数名必须和类名一样。构造函数除了用来创建对象之外,还起到以下作用:初始化成员变量,使对象的多元化。默认情况下,系统会为类提供一个空的构造函数:public 类名(){}。一旦为类增加了构造函数,那么系统就不会为这个类添加一个默认的构造函数。一般情况下他的书写格式如下:[访问修饰符] 类名(构造函数名)(参数列表){  }      

        建议:无论在什么情况下,必须显示定义一个空的构造函数。     

    函数重载指得是函数可以具有相同的方法名,但是参数的类型,个数,顺序不一样的函数互为函数的重载。函数的重载是因为功能一样,但是处理的内容和方式不一样。函数的重载前提条件是函数必须在同一个类里面。     

    this关键字,this指的就是当前对象。使用this关键字可以使得参数见名知意,同时起到了成员变量和参数之间的区别。值得注意的是this关键字是多态的。    

   static关键字,通过static关键字修饰方法,变量,属性都是属于类的。只能通过类来调用,不能通过对象来访问。凡是通过static关键字修饰的方法,只能够调用有static修饰的方法和变量。但是不能够直接调用成员的变量和方法。那么成员的方法可以直接的调用Static修饰的方法和变量。建议直接通过类名来访问Static修饰的变量和方法。static修饰的变量和方法在内存中只创建一次。直到程序退出,才会消失。也就是说是谁的谁调用。   

       C#的一些新特性:       

      1,属性:可以直接写属性,而不需要成员变量,get和set也不需要实现。       

    2,创建对象:在创建对象的时候,可以直接给属性赋值。如: People p = new People(){Name="",Age=90};       

    3,通过var关键字来标示任何类型的变量,但是不是说就是若类型语言, 但是,Var定义的变量只能够在方法里面使用。。如: var s = "sss";        var p = new People();    

      4,匿名对象:可以通过new 关键字来创建一个匿名对象,这个对象没有类型。属性可以随意定义。注意,匿名对象只能通过Var关键字定义的变量来接受。      

     C#的继承:继承是用来扩展自身的功能。通过关键符号“:”来实现继承,以下这些名词意思都是相等的 父类=基类=超类=base class;子类=sub类=派生类。继承中的构造函数,默认情况下,子类中的构造函数调用的是父类的空的构造函数。如果父类中没有空的构造函数,那么子类的构造函数必须显示的调用父类中的某一个构造函数。     

     base关键:base指得是父类对象。如果base放在子类构造函数后,则base调用的是父类的构造函数。如果base在普通方法中,则指的是创建的父类对象,可以调用父类对象中的方法和属性。    

   方法的重写:由于父类的方法不能够完成某种功能,单还必须调用这个方法,则子类可以重写这个方法,加强其功能。在父类里面,如果一个函数可以让子类重写,必须在在方法的前面用vritual关键来修饰。说明这个方法可以被子类重写。同理如果在子类里面,要重写父类的方法,则应在方法前面加上override关键字,说明这个方法是重写父类的。重写方法的要求是必须有继承,重写的方法和被重写的方法必须一模一样。    

    多态是一个事物可以同时具有多种较色,但是在某一种特殊的场合只表现出一中。其中比较重要的两种转型得需要我们深入的理解一下,我就是在这方面对多态有些概念的模糊,不过通过老师的深入解析渐渐的也就参透了其中的意思。     

  (1),上转型: 把子类对象赋值给父类对象,称之为上转型。他的原理:实际上是把子类对象中的父类对象赋值了父类,此时的赋值语句两边的类型是相同的。此时,这个父类对象能够调用的方法是:自己的方法和已经重写过的方法,如果方法没有被子类重写,那么调用的还是自己的方法。他的用途是方便同一标准,根据具体实现不同,而调用不同的方法,从而实现不同的功能和样式。

如:        WuDang w = new People();      

            w.sing();//已经重写的方法。            

         w.print();//print没有重写的方法

    

  (2),下转型:把已经上转型的父类对象赋值给子类对象。他的原理:就是把已经上转型后的父类对象所对应的原来的子类对象在赋值给子类对象。此时,这个对象能够调用的方法是自身的方法,继承来得方法和已经重写过得方法。 注意,下转型需要通过显示的类型转换。如:People pp = (People) w;     

   注意:C#中只支持单继承,一个类只能有一个直接的父类。     抽象类是类的一种特殊类,他没有构造函数不可以创建对象。他的书写格式如:              

         [访问修饰符] abstract class 类名

     { //拥有了普通类出构造函数外的任何东西   

      //还可以有抽象函数               

      }     

    sealed关键字:如果sealed修饰的是类,则这个类是无法被继承,不能当父类;如果sealed修饰方法,则子类是无法重写这个方法的。     

    interface接口是为了解决多继承的问题而诞生的一种特殊的“类”,接口里面只能写方法的定义和属性的定义。在接口中的方法定义前面不能含有public,子类在实现接口的方法是,不能使用override关键字。他的书写格式如:      

          pubilc interface 接口名 { }       

   注意:如果一个类同时要继承类也要实现结构,那么父类要写在前面,接口在后。     

    protected关键字:由protected关键字修饰的变量和方法只能在本类和子类中去使用,不能通过对象来访问。     

    namespace命名空间是为了解决重名的问题,方便管理类而产生的,命名空间只能够放,类,接口,枚举,结构体,委托 而不能有方法,变量的。命名空间是可以嵌套的,命名空间于物理路径没有关系,只和逻辑上有关系。他的书写格式如:

         namespace 名字{  }       

    enum枚举:把有限的元素放在一起。使用字母代替数字标示的含义。枚举是一个值类型。

下面是一个很容易理解的继承例子,他帮助我很明了的理解C#的继承关系:

using System;
public class StudyExtend1
{
    public static void Main()
    {
        People p = new People("ss");
        p.Test();
     p.TaiJi();
} }
public class WuDang { private string name; public WuDang(){} public WuDang(string name) { Console.WriteLine("I'm First!"); } public WuDang(int age){ Console.WriteLine("I'm First!"); } public WuDang(string name,int age) {} public string Name { get{return this.name;} set{this.name = value;} } public void Taiji() { Console.WriteLine(this.name); Console.WriteLine(this.GetType()); } } //People继承了武当 public class People : WuDang { public People(string name):base("ss",67) { Console.WriteLine("I'm Second!"); } public void Test() { base.Taiji(); base.Name ="ss"; } }

 

 

 

 

 

 

 

 

 

 

 

 

 

posted on 2012-07-29 21:50  兰@net  阅读(218)  评论(0编辑  收藏  举报

学无止尽