黑马程序员--冒泡排序、方法、方法重载和构造方法中的知识点

通过今天的视频学习了解了以下知识点:

 

1、冒泡排序
让数组中的元素俩俩比较,第i个与第i+1个比较,经过n(i-1)遍俩俩比较,数组中的元素能按照我们预期的规律排序。
要从大到小排序,我们在进行俩俩比较的时候用<
n个数需要排n-1趟
第t趟比较的次数为n-t次
例:
    int[]numbers={12,13,15,16,17,19,20};
    for(int i=0;i<numbers.Length-1;i++)
     {
       for(int j=0;j<numbers.Length-1-i;j++)
        {
           if(numbers[j]<numbers[j+1])
            {
              int temp=numbers[j];
               numbers[j]=numbers[j+1];
               numbers[j+1]=temp;
             }

         }
     }
     for(int i=0;i<numbers.Length;i++)
      {
         Console.WriteLine(numbers[i]);
      }
     Console.Readkey();
2、方法
功能:用来复用代码的,当我们在一个程序中反复的写了同样的代码,那一般情况下,我们可以把需要重复写的代码定义在一个方法中,用的时候只需要调用就行了。
定义方法的语法:
 [访问修饰符][static]返回值类型 方法名()
 {
    方法体;
 }

1)方法一定要定义在类中
2)如果方法没有返回值,则返回值类型写void
3)如果方法名没有参数()不能省略

如果是静态方法(由static修饰的)则使用类名.方法名();
在类中调用本类 的方法,可以写方法名;
return可以立即退出方法

变量的作用域
  在方法中定义的变量称为局部变量,其作用域从定义开始,到其所在的大括号结束为止;
  当被调用者想得到调用者方法中的变量时,则可以让调用者通过参数的形式给被调用者
    [访问修饰符][static]返回值类型 方法名([参数])
 {
    方法体;
 }
如:
 public static void Test(int number)  //形参
{
}
在方法名后面的括号内定义变量,叫做定义这个方法的参数,这里定义的变量用于接收调用者传过来的数据

注意:如果一个方法一旦有参数,那么调用者就必须传参数,并且传参数得个数与对应位置上的类型必须一致

当调用者想访问我们方法中的变量时,可以通过返回值返回。
例如:string s=Console.ReadLine();
      int i=Convert.ToInt32("2");
为什么方法前面能够定义一个变量收到方法的值,是因为在方法中使用了返回值;
只要在方法中返回了值,那么在调用方法中,前面就应该 用一个变量来接收方法的返回值。

注意:一个方法只能有 一个返回值
一旦一个方法有返回值,那么在这个方法值中,就必须通过return语句返回一个值,并且这个值要与返回值类型是相同的

语法:return值
当形参是数组的时候,我们传数组名
一个变量一旦定义在方法外,类的里面,就叫做类的字段,这个变量就可以被本类的所有方法所访问,但是要注意静态方法只能访问静态字段。
由const修饰的常量不能定义静态的,方法不论是静态或非静态都可以访问常量。

3、什么叫方法重载:
   一般在同一个类中,方法名相同,并且方法的参数的个数不同或者对应位置上的类型不同,才能构成方法的重载。
   注意:方法重载和返回值没有关系


Class Program
{
  static void Main(string[]args)
   {
     int number;
     int result=Test(out number);
     Console.WriteLine("number={0},result={1}",number,result);
     Console.Readkey();
 
   }
   static void Test(out int a)
   {
     a=10;
     a=a+1;
     return 200;
  
   }
}

如上代码,实现步骤:
1)在方法的参数类型前加out,那么传参数的时候,也必须在number前加out表明这个参数不是传入的,而是用来传出值的;
2)如果参数是以out形式传入的,那么在传入前可以不赋初值;
3)在方法中对于由out修饰的参数必须赋值,并且在使用前赋值。

out用于传出值,在方法中必须对out修饰的参数赋值,ref可以理解成是双向的,既可以传入又可以传出
在传参的过程中,如果参数有out或ref修饰的话,那么改变方法中的参数变量的值,调用者方法中变量的值也会相应改变。

4、类
定义类的语法:
[访问修饰符] class_类名
{
    成员;
    .....
}

在我们自己写的类中,我们在写方法时,先不用加static

如何通过一个类产一个生一个对象呢?
通过类来产生一个对象的过程叫做类的实例化

类的语法:
 类 实例名=new 类();
访问类的属性:
            实例名.属性名
访问类的方法:实例名.方法名()
* 只要是没有加static的方法或属性,都必须先实例化,再通过实例名.方法名或实例名.属性来访问
* 加static的方法或属性,可以直接通过类名.方法名或类名.属性来访问
 
C#中有四个访问修饰符:
                     public:可以在任何地方被访问
                     internal:可以在本项目中被访问
                     private:只能在本类中被访问
                     protected:只能在本类和子类中被访问

在类这个级别,不写访问修饰符默认为internal
在一个类中定义变量或方法时,没有写访问修饰符,那么默认的访问修饰符为private

什么叫属性:通俗点说就是定义一个public的具有get/set方法的变量,这个变量是用于保护一个私有变量
允许其他类访问的变量一定要声明为属性。

 

5、构造方法
使用构造方法的好处:
1)对多个属性进行赋值时 ,不需要重复的写实例名;
2)可以保证用户在new一个对象时,必须对某一个属性进行赋值;
3)和第二类似,在创建对象时,对只读属性进行初始化

要实例化一个类必须调用它的构造方法

namespace(命名空间),用于解决类的重命名问题,可以看作类的文件夹

不在同一个命名空间下的类,不能被直接访问,要想访问别的命名空间下的类有俩种方法:
1)通过using引用对方的命名空间
2)写全称 命名空间名.类名
 
string 可以看成char的只读数组,C#字符串有一个重要特征:不可变性

string 类:
方法:ToLower(); ToUpper(); Equals   ToString 一切类型都可以转换成字符串类型

 

posted @ 2012-11-27 08:23  韩俊  阅读(213)  评论(0编辑  收藏  举报