zoukankan      html  css  js  c++  java
  • C#编程(十二)----------函数

    类和结构

    类和结构实际上都是创建对象的模板 ,每 个对象都包含数据 ,并 提供了处理和访问数据的方法。

    类定义了类的每个对象 (称 为实例 )可 以包含什么数据和功能 。

    例如 ,如 果 一 个类表示 一 个顾客 ,就可以定义字段 CustomerID、 FirstName、 LastNane和 Address,以 包含该顾客的信息 。还可以定义处理在这些字段中存储的数据的功能 。 接着 ,就 可以实例化表示某个顾客的类的对象 ,为 这个实例设置相关字段的值 ,并 使用其功能 。

    例如有一个PgoneCustomer类

    class PgoneCustomer

    {

    public const string DayOfSendingBill=”Monday”;

    public int CustomerID;

    public string FirstName;

    public string LastName;

    }

    结构

    struct PgoneCustomerStruct

    {

    public const string DayOfSendingBill=”Monday”;

    public int CustomerID;

    public string FirstName;

    public string LastName;

    }

    结构与类的区别使他们在内存中的存储方式,访问方式(类是存储在堆(heap)上的引用类型,而结构的存储在栈上的值类型)和他们的一些特征(如结构不支持继承).较小的数据类型使用结构可提高性能.但在语法上,结果和类很相似.主要区别是使用关键字struct代替class来声明结构.结构的实例都分布在栈上,类的实例分布在托管堆上.

    类的结构都使用关键字ner来声明实例:这个关键字穿件对象并对对象进行初始化.

    PhoneCustomer myCustomer=new PhoneCustomer();

    PhoneCustomerStruct myCustomer2=new PhoneCustomerStruct();

    多数情况下,类的使用较多,类中的数据和函数叫做成员.类还可以包含嵌套的类型.成员的可访问性可以是:public,private,intermal,protected.

    数据成员是包含类的数据----字段,常量和事件的成员.数据成员可以是静态数据.类成员总是实例成员,除非用static进行显示的声明.一旦实例化PhoneCustomer对象,就可以实用语法Object.ieldName来访问这些字段,如:

    PhoneCustomer Customer1=new PhoneCustomer();

    Customer1.FirstName=”syx”;

    使用const关键字来声明常量.如果声明为public,就可以在类的外部访问它.

    class PhoneCustomer

    {

    public const string DaySendingBill = “Monday”;

    public int CustomerID;

    public string FirstName;

    public string lastName;

    }

    事件是类的成员,在发生某些行为(如改变类的字段火属性,或者进行了某种形式的用户交互操作)时,他可以让对象通知调用方.客户可以包含所谓的”事件处理程序”的代码来响应该事件.

    函数成员

    函数成员提供了操作类中数据的某些功能 ,包括方法、属性、构造函数和终结器,运算符以及索引器.

    方法

    注意,正式的C#术语区分函数和方法.在C#术语中,”函数成员”不仅包含方法,而且也包含类或结构的一些费数据成员,如索引器,运算符,构造函数和析构函数等.

    1.方法的声明

    [修饰符] 返回值类型 函数名 (参数列表)

    {

    函数代码

    }

    2.调用方法

    例如有一个方法:

    public void ShowHello(string name)

    {

    Console.WriteLine(name+”say : hello”);

    }

    调用的时候

    static void Main()

    {

    ShowHello(“zhangsan”);

    }

    3.给方法传递参数

    就是参数列表里需要什么类型,需要几个就传递几个

    4.ref,     out,     params的使用

    ref的特点是有进有出,即在传递参数之前就已经对它进行赋值,在传入方法体时,是将该数的地址传了进来,如果对其进行相应的赋值操作,直接改的是地址里的值,所以,当该方法执行完,该数的值也就跟着改变了。

    代码如下:

            static void Main(string[] args)         {             int i = 10;             FF( ref i);             Console.WriteLine(i);         }

            static void FF(ref int i)         {             i = i + 1;         }

    如果没有ref

    static void Main(string[] args)

            {

                int i = 10;

                FF(i);

                Console.WriteLine(i);

                Console.ReadKey();

            }

            static void FF(int i)

            {

                i = i + 1;

            }

    ref的作用这样一比较是不是很清楚了.ref和C中的指针相似.

    而out与ref的唯一区别是,在方法接收参数后,对它进行初始化(如果没有初始化,将会报错的),其余的用法都和ref一样。

    static void Main(string[] args)         {             int i ;             FF( out i);             Console.WriteLine(i);         }

            static void FF(out int i)         {

                i=10; //如果没有这个赋值,系统将会报错的             i = i + 1;         }

    out的使用案例

      public static void outfun(out string str)   {    str = "test";     //必须在函数体内初始, 如无此句,则下句无 法执行,报错    str += " fun";   }

    static void Main(string[] args)   {    string test1 = "syx";    string test2;                  //没有初始     outfun( out test1 );    //正确,但值syx无法传进去    outfun( out test2 );    //正确

       Console.Read();   }

    在调用含有out和ref函数的参数的时候,调用的时候需要显式的指明out或者ref.out存在的意义,个人认为是返回多个值.

    声明一个函数,在函数结束的时候,我想得到i改变后的值,也想得到j改变后的值,就可以使用out关键字.但是在调用的时候,需要实参前面加上关键字out.

    public static int outfun(ref int i,out int j)

            {

                i = 10;

                j = i+10;

                return i;

            }       

            static void Main(string[] args)

            {

                int a = 1;

                int b;           

                Console.WriteLine(a + "    " + b);           

                Console.ReadKey();

            }

    ref是有进有出,而out是只出不进。

    为了将方法声明为可以接受可变数量参数的方法,我们可以使用params关键字来声明数组,如下所示:

    public static Int32Add(params Int32[] values)

    {

         Int  sum = 0;

         for (Int32 x = 0; x < values.Length; x++)

         {

         sum += values[x];

         }

         return sum;

    }

         只有方法的最后一个参数才可以标记params,该参数必须标识一个一维数组,但类型不限。对方法的最后一个参数传递null或者0个数目的数组的引用都是合法的.

    在调用的时候,即可以传递一个数组,也可以传递一组数.例如:

    static void Main(string[] args)

            {

                int sum = GetSum(1, 2, 3, 4, 5, 6, 7, 8);

                Console.WriteLine(sum);

                int[] arrs = { 1, 2, 3, 4, 5, 6 };

                int sum2 = GetSum(arrs);

                Console.WriteLine(sum2);

                Console.ReadKey();

            }

    最后总结一下ref,out,param存在的意义.

    ref:相当于C中的指针,让参数传址引用.

    out:返回多个数.

    param:支持可变参数,但是一定要放在最后.

  • 相关阅读:
    饿了么P7级前端工程师进入大厂的面试经验
    前端程序员面试的坑,简历写上这一条信息会被虐死!
    这次来分享前端的九条bug吧
    移动端开发必会出现的问题和解决方案
    创建一个dynamics 365 CRM online plugin (八)
    创建一个dynamics 365 CRM online plugin (七)
    创建一个dynamics 365 CRM online plugin (六)
    创建一个dynamics 365 CRM online plugin (五)
    使用User Primary Email作为GUID的问题
    怎样Debug Dynamics 365 CRM Plugin
  • 原文地址:https://www.cnblogs.com/FinleyJiang/p/7602132.html
Copyright © 2011-2022 走看看