码迷,mamicode.com
首页 > Windows程序 > 详细

C#基础---->方法

时间:2016-04-26 19:11:22      阅读:314      评论:0      收藏:0      [点我收藏+]

标签:

 public class Tree
    {


        /*
         * 1.0考虑一个问题;
         *     我们有一段代码 需要在不同的地方执行一次!!!
         *     
         * 
         * 2.0如何实现
         *    a--> 复制粘贴
         *    b-->将这段代码封装成方法 在需要的两个地方各自调用一次就好了
         *    
         * 
         * 3.0方法
         *   a--->对一段代码重用的机制
         *   b--->在面向过程中也会称作为函数  其实方法和函数指的都是同一个东西
         *   
         * 
         * 4.0创建方法的语法
         * 访问修饰符  方法返回值   方法名称([参数列表])
         * {
         *   方法体
         * }
         * 
         *  关于方法的定义
         *    a.  定义方法的位置:直接定义在类的下面.
         *    b.  访问修饰符有5种. public是其中的一种. 所以这个地方不用关心什么意思,直接写上public
         *    c.  static关键字.
         *        我们自己定义的方法 如果需要在1个被static修饰的方法中调用. 
         *        那么我们定义的方法必须要加上static才可以被调用.
         *    d.  方法的返回值  
         *    e.  方法的名称:
         *        1). 方法的名字要取的有意义. 让别人看到名字就知道方法的内部代码在做什么事情.
         *        2). 方法中的代码是在完成1个功能,所以方法的名称要求使用1个动词.
         *        3). 方法的名称每1个单词的首字母大写.
         *    f.  特别强调,小括弧后面没有分号.
         *    
         * 5. 关于方法的调用
         *    完整的调用方式:  类名.方法名()---->静态方法调用方式,  new 类名().方法名()---->非静态方法调用    方法中加了static叫做静态方法;
         *    如果调用的方法的地方和定义方法在同1个类中: 方法名();
         * 
         */





        /// <summary>
        /// public:--->公共的
        /// static:表示该方法是一个静态方法
        /// void:方式该方法没有返回值
        /// Getnum():此方法的方法名,由于括号中是空的  表示此方法是一个无参数的方法
        /// </summary>
        public static void GetnumOne()
        {
            //方法体
        }



        /*
         * 访问修饰符  public  private  protected 
         * 
         */



        /// <summary>
        /// 没有访问修饰符 那么就是默认的private: 表示该方法是私有的
        /// int:该方法最终会返回一个int类型的值
        ///  GetNumTwo(string str)  表示传入的参数是一个string类型的
        ///  return :表示返回数据
        /// </summary>
        /// <param name="str"></param>
        /// <returns></returns>

         static int GetNumTwo(string str)
        {
            if (string.IsNullOrEmpty(str))
            {
                return 0;
            }
            else
            {
                return 1;
            }
        }


         public string GetNum()
         {
             return "测试";
         }


        //------------------------------局部变量和成员变量--------------------------------------


        /* 1. 局部变量: 定义在方法中的变量.
             *    成员变量: 直接定义在类下面的变量.
             * 
             * 
             * 2. 局部变量与成员变量的区别:
             *    a. 作用域不同:
             *       局部变量只能在方法中访问.
             *       成员变量可以本类的所有方法中访问.
             *       
             *       成员变量如果希望在被static修饰的方法中访问.
             *       那么这个成员变量也需要被staic修饰.
             *       
             *    b. 默认值不同
             *       局部变量在声明的时候如果没有为其赋值 那么这个局部变量是没有值的.
             *       所以在使用之前必须要保证这个变量中有值
             *       
             *       成员变量在声明的时候如果没有为其赋值 那么这个成员变量是有默认值的.
             *       如果成员变量的类型是值类型的 那么默认值是0
             *       如果成员变量的类型是引用类型的 那么默认值是null
             *       
             *    
             * 
             * 
             */

         public string Name;  //想这种定义在类(class关键字)下的 叫做成员变量

         public void TestDemo()
         {
             int num = 1;   //这种定义在方法中的变量叫做局部变量  //只是在这个方法中有效   
         }


       //------------------------------------------以下部分是属性介绍----------------------------------------

        /* 1. 为什么要保护字段?
         *    因为我们希望在为字段赋值或者取值的时候做1个逻辑验证.
         * 
         * 2. 微软提供了一种更为简洁的语法来保护字段---属性.
         *    属性的作用: 保护字段.
         *    
         * 3. 如何使用属性来保护字段呢?
         *    a.  被保护的字段一定要私有化.
         *    b.  为这个字段写1个属性
         *        语法:
         *        访问修饰符 属性的类型 属性的名称
         *        {
         *              get
         *              {
         *              }
         *              set
         *              {
         *              }
         *        }
         *        
         * 4. 外部如何操作属性.
         *    a. 图标为扳手的就代表属性.
         *    b. 外部操作的时候将属性当做字段来操作,使用赋值符号直接赋值或者直接写上属性的名称取值.
         *    
         * 5. 属性到底是如何来保护字段的
         *    a. 为属性赋值的时候,会调用属性中的set代码块. 在set中可以通过关键字value拿到用户为属性赋的值
         *       一般情况下,我们在set代码块中 取出用户为属性赋的值(value) 做逻辑验证.
         *       如果符合逻辑 就将用户赋的值赋值给被保护的字段.
         *       否则做默认处理.
         *       
         *    b. 当我们取属性的值的时候,就会执行属性中的get代码块的内容.
         *       最终取到的值,是在get块中return回去的值.
         *       一般情况下,我们在get代码块中 将属性保护的字段的值返回.
         * 
         * 6. 写属性的时候要注意如下几点 
         *    a、  访问修饰符. 其实任意都可以写, 因为属性是用来被外部访问的. 
         *         所以绝大多数情况下,属性的访问修饰符应该是public
         *    b、  属性的类型不能是void。 属性的类型一般情况下和被保护的字段的类型一致.
         *    c.   属性的名称: 每个单词的首字母大写.
         *                    属性的名称任意取,但是建议和被保护的字段的名称保持一致(做大小写区分) 方便代码的阅读
         *    d.   为属性赋值的时候,数据的类型要和属性的类型保持一致, 与被保护的字段的类型无关.
         *         当然绝大多数情况下,属性的类型和被保护的字段的类型一致.
         *    e.   set块中的value的类型 由 属性的类型 决定.
         *    f.   get代码快必须要在结束之前返回个数据. 返回的数据的类型由属性的类型决定.
         *    g.   属性中只能包含get块和set块,其他的代码不能直接写在属性之中.
         *    
         * 7. 注意
         *    a. 一定是先有字段,再用属性来保护它.
         *    b. 在get和set中操作的是字段.而不是操作属性. 如果操作属性的话就会发生死循环,
         *    c. 属性的类型绝大多数情况下和被保护的字段一致,
         *       如果希望外界得到字段的值 的类型 不要和字段的类型一致 那么就可以不一致.
         *       bool类型的gender 希望得到1个string类型的"男‘女
         *    d. 1个字段对应1个属性. 不要多个字段对应1个属性这样很不好操作.
         *    e. 在set块中,我们是判断value是否符合逻辑,而不是判断字段.
         *    
         *    f. 在类的内部.取值的时候,是取属性的值呢还是取字段的值呢?
         *       1) 如果属性取值的时候 没有做任何逻辑验证. 直接返回字段的值
         *          那么这个时候,取属性的值和取字段的值是没有分别的,因为取出来的值都是一样的.
         *          但是建议你取字段的值,因为这样效率更高.
         *       2) 如果属性取值的时候,有做逻辑验证.那么这个时候取属性的值和取字段的值 取到的就不一样了.
         *          那么根据你的具体情况来决定,看你希望得到什么值.
         *          
         *   赋值的时候. 如果属性在赋值的时候经过了逻辑处理.那么这个时候赋值 给字段赋值和给属性赋值的效果不一样.
         *       如果你希望你的值是很特殊 不需要经过验证 那么直接赋值给字段
         *       如果你希望你的值也要验证 那么就赋值给属性.
         *       
         * 8. 属性的本质是1个get方法和1个set方法.
         *    只不过微软提供了1种更为简洁的方式来帮助写这两个方法
         *    我们之所以可以再set里面通过value关键字取到用户赋的值 是因为set本质是1个方法 这个方法的参数叫做value
         *    
         * 
         * 9. 为字段快速封装属性的快捷键: ctrl+r+e
         * 
         * 10.C#关于属性的规范:
         *    只要字段需要被外界访问.无论在取值或者赋值的时候是否有逻辑验证,都应该为这个字段封装属性.
         *    
         * 
         * 11. 只写属性
         *     属性中只有set块而没有get块.  那么只能为这个属性赋值. 而不能取这个属性的值.
         *     只读属性
         *     属性中只有get块而没有set块, 那么只能取这个属性的值 而不能为这个属性赋值.
         *     
         *     属性中至少要有1个访问器..
         * 
         * 12. 我们将值赋值给了属性,会以为将值存储在了属性之中.
         *     不是这样的
         *     属性是不能存储数据的. 我们给属性赋值 然后属性的set块将值存储到字段中.
         *     
         *     在C#中只有变量才可以存储数据.  
         * 
         * 12. 自动属性
         *     如果属性对某个字段的封装可读并且可写. 并且在读写的时候没有任何的逻辑验证.
         *     那么这个时候,我们就可以不写字段,而直接写1个自动属性.
         *     
         *     当我们写1个自动属, C#编译器在编译的时候,会自动的生产1个字段.
         *     然后这个字段被自动属性所封装.
         *     
         *     什么时候才可以写1个自动属性:
         *     a. 可读并且可写.
         *     b. 读写的时候没有任何逻辑验证
         *     
         */

         public double weight;
         public double Weight { get; set; }




         private int age;
         public int Age
         {
             get
             {
                 return this.age;
             }
             set
             {

                 this.age = value >= 0 && value <= 120 ? value : 18;
             }
         }


    }

 下面是用的控制台程序  做的演示demo 

 

 class Program
    {
        static void Main(string[] args)
        {


            
            //调用静态方法   
            Tree.GetnumOne();

            Tree tree = new Tree();

            Console.WriteLine(tree.GetNum());   //打印出tree.GetNum()的返回值    tree.GetNum() 是一个实例方法   所以要先创建Tree的实例


            //使用属性
            Console.WriteLine(tree.Age);//打印出 Age属性的值
               
          
            Console.ReadKey();
        }



      
    }

 

C#基础---->方法

标签:

原文地址:http://www.cnblogs.com/soaeon/p/5436100.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!