黑马程序员-Net基础4

来源:互联网 发布:淘宝装修热点 编辑:程序博客网 时间:2024/05/16 04:31

                      ----------------------   Windows Phone 7手机开发.Net培训    期待与您交流! ----------------------



1、常量

语法:

Const  类型 常量名=常量值;

Const double PI=3.14;

使用:

只能在初始化的时候赋值,以后不能赋值,防止意外修改

2、枚举

语法:

enum 自己起的类型名称{值1,值2.值n}

enumGender{male,female}

enumQQStatus{online,offline,hidden}

注意:定义枚举时,值不能是int类型

枚举类型都可以强制转换成int类型,枚举的值在定义时有一个默认的编号,编号从0开始

使用:

QQStatus status=QQStatus.online;

Gender sex;

sex=Gender.male;//不能赋其他值,否则报错,从而保证了赋值的统一性

 

定义枚举值的时候不用双引号。

让我们定义一种类型并且在定义这种类型时指定这种类型的所有值

 

枚举的定义,一般和类定义在同一个级别。这样在同一个命名空间下的所有的类就都可以使用这个枚举了,(变量的作用域!)

方法中类中也可以

 

枚举的作用:

限制用户不能随意赋值只能定义枚举时列举的值中选择

不需要死记每一个值是什么,只需选择相应的值

 

3、字符串与枚举的转换

         enum Gender

        {

           male,female

        }

    class Program

    {

        static void Main(string[] args)

        {

        Gender sex;

        Console.WriteLine("请输入你的性别");

        string s =Console.ReadLine();

        sex = (Gender)Enum.Parse(typeof(Gender),s);

        Console.WriteLine("你输入的性别是" + sex);

        }

字符串类型不能直接赋给枚举类型,Gender.Male.Tostring和gender sex;sex=console.readline()都是错误的

如何把一个字符串转换成枚举类型?:

(Gender自己定义枚举名)Enum.Parse(typeof(Gener自定义枚举名)," male待转换的字符串");//记住

待转换的字符串必须是枚举中有的值

用户输入的值一定要使用try-catch

 

4、结构

语法:

访问修饰符 struct 结构名

{

定义结构体成员;//结构体可以包含变量和方法

}

为什么要用结构:

声明一组变量如果多人则声明多组变量

存储的这几个变量之间没有关系

 

定义好一个结构之后就可以直接声明相应的变量了

            Person onePerson;//声明一个结构体就行了 。就包含结构中的所有成员变量

            onePerson.age = 20;//通过变量名.成员名来调用结构体中的变量了

            onePerson.sex = Gender.male;

            onePerson.name ="zhangsan";

            Console.WriteLine("")

 

访问级别不同枚举和结构调用要加都加public要不加都不加

由于Person中含有Gender


一个解决方案下多个项目之间互相调用

三层结构

多层调用

注意修饰符

Console.clear();清屏

 

5、数组

数组的声明语法:

数据类型 [] 数组名= new数据类型[]

int []score=newint[3]

int []nums={5,3,8}

int nums=new int [3]{5,3,8}个数和声明数必须一致

int nums=new int[]{5,3,8}可以省略数组个数

int nums=new int[5]{5,3,8}错误

 

如何访问数组:

通过下标来访问数组:数组名[编号]

Score[0]=3;

使用索引器访问指定编号位置的元素,访问数组元素:nums[],也可以对数组元素赋值

通过 数组名.length   获得数组的长度

常见问题:求平均值、求最大值、求和、排序

 

5、方法:

功能:重复使用的代码

基础的功能定义为方法

方法的定义:

[访问修饰符][static] 返回值类型 方法名([参数])

{

方法体;

}

命名规则:方法名开头大写,参数名开头小写,参数名、变量名要有意义

方法的调用对于静态方法,如果在同一个类中,直接写名字调用就行了

方法定义在类中,如果方法没有返回值,则返回值类型写void如果方法没有返回值()也不能省略

可以直接写在主程序program类中,也可以添加类,然后写方法

方法的调用:

静态方法:static修饰的

类名.方法名();Program.showUI();

在类中调用本类中的方法可以只写 方法名();另写的类中定义的函数则需要写出类名

四种方法:

有返回值有参数

有返回值没参数

没返回值有参数

没返回值没参数

 

方法的重载?

在同一个类中,方法名相同,并且方法的参数的个数不同或者对应位置上的类型不同,才能构成重载

继承? 同一个类子类父类 ?

 

方法的重载和返回值没有关系?

方法的参数和个数相同但是返回值类型不同不能构成重载

 

6、方法的out参数和ref参数

方法只能返回一个值当要返回多个值,怎么办?

函数参数默认是值传递,也就是赋值了一份

out则是内部为外部变量赋值,out用于函数需要有多个返回值的场所

实现步骤:

在方法中的参数前加out那么传参数的时候也必须在number前加out表明这个参数不是传入的而是传出值的

 

如果参数是以out形式传入的那么再传入前可以不赋初值

在方法中对于out修饰的参数必须先赋初值,并且在使用前赋值

out用于传出值,在方法中必须对out修饰的传参赋值

ref可以穿出又可以传入  非值传递而是地址传递跟指针差不多

在传参的过程中如果有out或者ref修饰的话,那么改变方法中的参数变量的值调用者方法中变量的值也会相应改变

 

值传递和引用传递?

 

例子:实现mytryParase

        static void Main(string[] args)

        {

            string s =Console.ReadLine();

            int re;

            if (MytryParase(s, out re))

            {

                Console.WriteLine("转换成功" + re);

            }

            else

            {

               Console.WriteLine("转换失败");

            }

            Console.ReadLine();

        }

 

        static boolMytryParase(string s, out intresult)

        {

            result = 0;

            try

            {

                result =Convert.ToInt32(s);

                return true;

            }

            catch

           {

                return false;

            }

        }

例子:写一个方法计算int类型的数组,返回一个最大值和最小值

static void Main(string[]args)

        {

            int[]numbers={1,5,9,8,7,5};

            int sum,max,min;

            sum = compute(numbers,out max, out min);//传参的时候一定不要忘了out!!!!!!

            Console.WriteLine("和是{0},最大值是{1},最小值是{2}", sum, max, min);

            Console.ReadLine();

        }

 

        static int compute(int[]num, out int max, out int min)

        {

            int sum= 0;

            max =num [0];

            min =num [0];

            for (int i = 0; i < num.Length; i++)

            {

                sum = sum + num[i];

                if (num[i] > max)

                {

                    max = num[i];

                }

                if (num[i] < min)

                {

                    min = num[i];

                }            

            }

            return sum;

        }

Inta=convert.Toint32(a)

Inta=int.parse(a)

int.tryparse(a)

 

6、变量的作用域:

在方法中定义的变量为局部变量,其作用域从定义开始到其所在的大括号结束为止

在一个方法中调用另一个方法中的变量,怎么办?

有两种方法:参数和返回值

如果一个方法有参数在调用时必须传参数,并且传参数的个数与对应位置上的类型必须一致

方法访问调用者的参数   传参

调用者访问方法中的值   return返回值(方法定义时void改为要返回的值的类型)

 

6、字段:

一个变量定义在类的里面方法外面就叫做类的字段,这个变量就可以被本类的所有方法访问(就可以不用传参了)。

静态方法只能访问静态字段

非静态的方法既能访问静态字段又可以访问非静态字段

 

非静态的字段叫做实例字段

类名.字段名  才能访问到

 

常量不能声明为静态的,可以放在方法中也可以放在类中方法外

所有方法都可以访问常量

 

预编译指令

 

了解

窗体中的事件?

消息?

reflect插件反编译.net程序

 

7、返回值

string s=Console .ReadLine ();

            int i =Convert.ToInt32("22");

为什么方法面前能够定义一个变量受到方法的值是因为在方法中使用了返回值

只要方法中返回了值,那么在调用方法时前面就应该有一个变量来接收到后方法的返回值

注意:一个方法只能有一个返回值,一旦方法有返回值,必须通过return返回一个值,并且与返回值类型是相同的

 

方法内部一般都是封装的最小功能块,不强制显示

 

Intsum=add(a,b)

得到的就是return返回值传给了sum,而a、b是传给方法的值

 

说明参数是通过方法实现

 

质数判断

除到开方就可以了

 

                      ----------------------   Windows Phone 7手机开发.Net培训    期待与您交流! ----------------------

 

                                     详情请查看:http://edu.csdn.net/heima


 

 

原创粉丝点击