正文

C#Doorstep2面向对象程序设计篇22008-04-03 16:18:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/xman/33896.html

分享到:

方法(成员函数)

    C#中,数据和操作均封装在类中,数据是以成员变量的形式出现,而对数据的操作主要体现在方法的使用上。在类中,方法的一般格式为:

[方法修饰符]  返回值类型 方法名([参数列表]{方法体}

[方法修饰符] 默认为internal

Person类中定义了方法:public void Display(){} 实现从控制台输出人的姓名、性别和年龄。

C#方法(函数)的参数有四种类型:值参数、引用参数、输出参数和参数数组。

未用任何修饰符声明的参数为值参数。值参数在调用该参数所属的函数成员(方法、实例构造函数、访问器和运算符)时创建,并用调用中给定的实参值初始化。当从该函数返回时值参数被销毁。对值参数的修改不会影响到原自变量。值参数通过复制原自变量的值来初始化。   

    以下实例演示了四种参数传递方式。

using System;

namespace Exam2_3

{

     class Class1

     {

         static void Swap(int a,int b)//a,b为值参数

         {

              int t;

              t=a;a=b;b=t;

         }

         static void Swap1(ref int a,ref int b)//a,b为引用参数

         {

              int t;

              t=a;a=b;b=t;

         }

         static void OutMultiValue(int a,out int b)//不为输出参数

         {

              b=a*a;

         }

         static void MutiParams(params int []a)//a为参数数组

         {

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

              {

                   Console.WriteLine("a[{0}]={1}",i,a[i]);

              }

         }

         static void Main(string[] args)

         {

             int x=10,y=20;

              int []b={10,20,30};

              int v;

              Swap(x,y);

              Console.WriteLine("x={0},y={1}",x,y);

              Swap1(ref x,ref y);

              Console.WriteLine("x={0},y={1}",x,y);

            OutMultiValue(10,out v);

              Console.WriteLine("v={0}",v);

            MutiParams(b);

            Console.ReadKey();

     }

     }

}

结果分析:

<1>. Swap(x,y)执行后x,y的值并未改变:

未用任何修饰符声明的参数为值参数。值参数在调用该参数所属的函数成员(方法、实例构造函数、访问器和运算符)时创建,并用调用中给定的实参值初始化。当从该函数返回时值参数被销毁。对值参数的修改不会影响到原自变量。值参数通过复制原自变量的值来初始化。

<2>. Swap1(ref x,ref y)执行后x,y的值交换:

ref修饰符声明的参数为引用参数。引用参数就是调用者提供的自变量的别名。引用参数并不定义自的变量,而是直接引用原自变量,因此对引用参数的修改就将直接影响相应自变量的值。在函数调用中,引用参数必须被赋初值。这里的ref相当于C/C++中的应用符号“&.

<3>. OutMultiValue(10,out v);

out修饰符定义的参数称为输出参数。如果希望函数返回多个值,可使用输出参数。输出参数与引用参数类似,它并不定义自己的变量,而是直接引用原变量,这样当在函数内为输出参数赋值时,就相当于给原自变量赋值。与引用参数的差别在于:输出参数在调用方法前无需对变量进行初始化。

这里的out类似于return.

<4>. MutiParams(b);

params修饰符声明的变量称为参数数组,它允许向函数传递个数变化的参数。在方法的参数类表中只允许出现一个参数数组,而且在方法同时具有固定参数和参数数组的情况下,参数数组必须放在整个参数列表的最后,同时参数数组只允许是一维数组。不能将params修饰符与refout修饰符组合起来使用。这里params相当于C/C++中的指标(pointer)。

属性

属性是一种类成员,它是对现实世界中实体特征的抽象,它提供了一种对类或对象特征进行访问的机制。例如:字体、颜色、标题等都可以作为属性。属性所描述的是状态信息,在类的某个实例中,属性的值表示该对象相应的状态值。与域相比,属性具有良好的封装性。属性不允许直接操作数据内容,而是通过访问器进行访问。这种机制可以把读取和写入对象的某些特性与一些操作关联起来;甚至,它们还可以对此特性进行计算。

定义属性的格式如下:

访问修饰符 属性类型 属性名 {             get { }          set { }       }

其中getset分别定义了属性所描述的域的读、写属性。

using System;

class Window{

private double m_width=30;

public double Width{

            get { return m_width; }

            set { m_width=value;  }  }

  public static void Main() {

         Window w = new Window();

         w.Width=20;

         Console.WriteLine(The width of window is {0}.,w.Width);

Console.ReadKey();

}

}


结果分析:

w.Width=20,属性Width调用set访问器给对象w的域m_width赋值。w.Width则调用

get访问器访问对象w的域m_width的值。

可以说,属性是一种特殊的方法,但属性和方法也有不同之处,主要有:

1)属性不必使用圆括号,但方法一定使用圆括号。

2)属性不能制定参数,方法可以指定参数。

3)属性不能使用void类型,方法则可以使用void类型。

(To be continued)

阅读(2688) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册