黑马程序员《.NET 方法》

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

(1)关于常量

定义常量的语句:const 数据类型 常量名称=值;

何为常量?

常量在程序的运行过程中是不会发生变化的量,如果在程序中强制修改它的值就会发生错误。如果想要修改它,只能在定义是修改。

常量的命名规范:常量的名称必须具有一定的实际意义。常量名称最好以大写字母来命名,中间可根据意义的连接性用下划线做连接,每个常量定义的右侧最好有一些简单的注释。常量名称最好不要超过25个字符,否则可读性差。

例如:const double PI=3.1415926;//定义了一个常量PI

(2)枚举

枚举的作用:

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

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

注意:

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

命名规范:我们定义一个枚举时要列尽这个类型的所有可能的值。它的定义一般与类定义在一个级别,这样在同一命名

空间下的所有类都可以使用这个枚举了。

语法:enum 类名{值1,值2,值3......}

例如:   enum gender
    {
        男,女
    }
    class Program
    {
        static void Main(string[] args)
        {
            gender sex;
            sex = gender.男;//赋值时只能是枚举中定义的
            switch (sex)
            {
                case gender.男:
                    Console.WriteLine("男");
                    break;
                case gender.女:
                    Console.WriteLine("女");
                    break;
            }
            Console.ReadKey();

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

语法:(自定义的类型)(Enum.Parse(typeof(自定义类型),s))

s是待转换的字符串

例如:enum choice
    {
        是, 否
    }
    class Program
    {
        static void Main(string[] args)
        {
            choice input;
            Console.WriteLine("请输入您的选择");
            string s = Console.ReadLine();
            try   //异常捕捉
            {
                input = (choice)(Enum.Parse(typeof(choice), s));//枚举类型的转换
                Console.WriteLine("您的选择为:" + input);
            }
            catch  //程序一旦出错,跳进catch中执行catch代码
            {
                Console.WriteLine("您的输入有误,请重新输入");
            }
            Console.ReadKey();

(3)结构的使用

我们为什么要使用结构?

比如说我们要存储一个人的信息,包括年龄,性别,名字,我们要声明一组变量,那么当我们要存储n个人的信息时,就要声明n组变量,太麻烦,这时我们就可以使用结构。

语法:访问修饰符  struct 结构名

{

定义结构成员

}

 

例如:

 public enum Gender
    {
        男,
        女,
    }
    public struct Person //结构体的语法,访问修饰符常用public
    {
        public string name;//结构成员
        public Gender sex;
        public int age;
    }//以上定义了一个名称为person的结构

    class Program
    {
        static void Main(string[] args)
        {
            Person onePerson;//声明了一个人的变量
            onePerson.name = "张三";
            onePerson.age = 20;
            onePerson.sex = Gender.男;
            Console.WriteLine("我叫{0},今年{1},我是{2}性", onePerson.name,
                onePerson.age, onePerson.sex);
            Person secPerson;
            secPerson.name = "李四";
            secPerson.age = 26;
            secPerson.sex = Gender.男;
            Console.WriteLine("我叫{0},今年{1},我是{2}性", secPerson.name,
                   secPerson.age, secPerson.sex);
            Console.ReadKey();

(4)数组

数组可以帮我们一次声明多个类型的变量,这些变量在内存中连续存储的。

语法:数据类型[] 数组名=new 数据类型[数组长度]

我们可以通过下标(索引)来访问数组,比如我们要个数组的第一个元素赋值3,则可以写成 数组名[0]=3。

int 类型数组一旦声明,里面的每一个元素都被初始化成了0。

注意:

下面有几种写法:

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

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

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

只有第一种写法是对的,第二个声明了数组长度为5却赋了三个值,最后一个是空数组却赋了值。

(5)方法(函数)

我们为什么要定义一个方法?

当我们在一个程序中反复的写了同样的代码,那一般情况下我们可以把需要重复写的代码定义在一个方法中,用的时候只需要调用就行了,为我么编程省去了不必要的麻烦。

定义方法的语法:

访问修饰符  返回类型  方法名(参数列表)

{方法的主体}

访问修饰符:我们常用的有public  private 

返回值类型:我们编写的方法是实现专门处理的模块,可供他人调用,在调用后可以返回一个值,这个返回值的数据类型就是方法的返回类型,可以使Int float double  bool  string,如果没有返回值则用void。

方法名:每个自定义的方法都要有一个名称,方法的名称应该具有明确的定义,这样在别人调用时,就能知道明确的功能。

参数列表:调用方法时,我们可以向方法中传递参数,这些参数构成了参数列表,如果没有参数就不用参数列表。

方法的主体:方法的主体部分就是这个方法实现某一特定功能的代码,自定义方法时,应该写方法的声明,包括访问修饰符,返回类型,方法名,参数猎豹,然后再写方法的主体。

方法的命名一般用Pascal命名法,每个单词的首字母大写。

方法的调用原则:

对于静态方法,如果在同一个类中,在调用时我们直接写名字调用就行了。就是    方法名()

如果不在同一个类中,必须要写出方法所在的类名   就是   类.方法名()

下面参照一个方法的定义:

 class Program
    {
        static void Main(string[] args)
        {
            ShowUi();//调用方法,具体参考调用规则
            int[] scores = { 93, 34, 67, 86, 54, 87, 98, 53, 82 };
            for (int i = 0; i < scores.Length - 1; i++)//外层循环控制比较几趟
            {
                for (int j = 0; j < scores.Length - 1 - i; j++)//内层循环控制比较几次
                {
                    if (scores[j] > scores[j + 1])
                    {
                        int temp = 0;//负责把小的数移动到前面,如果降序排列则改为<
                        temp = scores[j];
                        scores[j] = scores[j + 1];
                        scores[j + 1] = temp;
                    }
                }
            }
            for (int i = 0; i < scores.Length; i++)
            {
                Console.WriteLine(scores[i]);
            }
            Console.ReadKey();
            Console.Clear();

            ShowUi();
            Console.WriteLine("按任意键退出");
            Console.ReadKey();

        }
        /// <summary>
        /// 用于显示软件界面的一个方法
        /// </summary>
        public static void ShowUi()
        {
            Console.WriteLine("*****************");
            Console.WriteLine("*    欢迎你     *");
            Console.WriteLine("*****************");
        }
如上所示:方法和Main方法在同一个类中,那么调用时我们直接写   方法名()  调用就行了。

(6)参数的传递

变量的作用域:在方法中定义的变量称为局部变量,其作用域从定义开始到其所在的大括号结束为止,一个变量一旦定义在方法外,类的里面,就叫做类的字段,这个变量就可以被本类的所有方法所访问,但要注意,静态方法只能访问静态字段。

调用者和被调者之间是如何传递变量的值的?

情况一:当被调用者想得到调用者方法中的变量时,则可以让调用者通过参数的形式给被调用者。

例如://传参数的简单示例,被调用者访问调用者中的参数
        static void Main(string[] args)
        {
            int a = 3;
            Test(a);//调用者   把a传给被调用者中的a去,不会出现重复定义,因为涉及
            //到a的作用域问题   此方法中a的作用域到大括号结束就结束了
            Console.WriteLine(a);
        }
        public static void Test(int a)//被调用者    括号中的参数用于接收调用者传过来的数据
        {
            a = a + 1;
            Console.WriteLine(a);
        }

情况二:假如调用者要访问被调用者中的变量时,可以通过返回值返回,并且在调用者所在的方法中定义一个变量来接收。

例如:

//此程序是调用者访问被调用者中的参数
        static void Main(string[] args)
        {
            Console.WriteLine("您确定要关机吗?y/n");
            string s=ReadAnswer();
                if(s=="y")
            {
                Console.WriteLine("正在关机");
            }
            else
            {
                 Console.WriteLine("不关机");
            }            
        }

        public static string  ReadAnswer()   //这里的返回值类型是字符串类型,所以用string
        {
            string reasult = "";
            do
            {
                reasult = Console.ReadLine();
                if (reasult!= "y" && reasult!= "n")
                {
                    Console.WriteLine("输入有误,请重新输入");
                }
            } while (reasult != "y" && reasult!= "n");
            return reasult; 

      }
(7)方法的重载

方法重载的特点?

一般在同一个类中,方法名相同,但参数的个数或者类型不同,才能构成方法的重载。

举例来更好的理解方法重载:

我们常用的Console.WriteLine()方法,提供了输出的多种重载方法。

Console.WriteLine(1);

Console.WriteLine(2.0);

Console.WriteLine("hello");

Console.WriteLine("hello,{0}",name);

第一个方法接收一个整型参数,第二个方法接收一个浮点型参数,第三个方法接收一个参数,第四种方法接收两个参数。这就是方法重载的案例。

(8)方法中返回多个值

我们知道一个方法只能返回一个值,那么如果我们要返回多个值时该怎么办?

这里我们就需要用的out,它一般用在有多个返回值的场所。

例如: // 写一个MyTryParse 方法,要求用户传入一个字符串,如果这个字符串能转化成int类型
        //则方法返回true,并且转换后的int类型数据通过方法的参数传出,如果字符串不能转化成int类型
        //则方法返回false,那么out传出的参数将没有意义,那么在方法中随意赋一个值就行了
        static void Main(string[] args)
        {
            string s = "123";
            int re;
            if (IntTryParse(s, out re))//尝试转换并返回转换后的值
            {
                Console.WriteLine("转换成功" + re);
            }
            else
            {
                Console.WriteLine("转换失败");
            }
            Console.ReadKey();
        }
        public static bool IntTryParse(string s, out int result)//定义tryparse方法
        {
            result = 0;
            try
            {
                result = Convert.ToInt32(s);
                return true;
            }
            catch
            {
                return false;
            }
        }

 

 

总结: 易错点  难点

成员访问级别:

字段,方法,属性都可以叫做类的成员,它们都需要定义访问级别,访问级别的用处在于控制成员在那些地方可以被访问,这样达到面向对象中“封装”的目的。

public:可以在任何地方被访问

internal:只能在本项目中被访问

private:只能值本类中被访问

protected:只能在本类和子类中被访问

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

 

out ref区别:

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

 

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

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值