C#基础(六)类和方法

一、类

例子:

static void Main() 

{ 

Doctor dc=new Doctor(); 

dc.Name="李四"; 

dc.Age=25; 

Doctor dc2=new Doctor("张三",35); 

Console.WriteLine(dc.Name); 

Console.WriteLine(dc.Age); 

Console.WriteLine(dc2.Name); 

Console.WriteLine(dc2.Age); 

Console.WriteLine(dc.doSth()); 

Console.WriteLine(Doctor.doAnth()); 

} 

} 

}

Doctor dc = new Doctor()用来实例化一个Doctor类,产生了一个新医生。与类同名的叫构造函数,是用来初始化类的,在每个类实例化的时候会自动调用。

二、方法

1.值传递和引用传递

using System; 

namespace gosoa.com.cn 

{ 

public class OneDoctor 

{ 

static void FunctionTest(int [] arr, int x) 

{ 

arr[0]=100; 

x=10; 

} 

static void Main() 

{ 

int [] arrTemp={0,1,2,3,4}; 

int y=30; 

Console.WriteLine(arrTemp[0]); 

Console.WriteLine(y); 

FunctionTest(arrTemp, y); 

Console.WriteLine(arrTemp[0]); 

Console.WriteLine(y); 

}

}

}

输出0,30,100,30。因为数组是引用类型,在调用方法前后,引用类型的修改会保留下来,而值类型的修改不会保留下来。

2.ref参数

ref关键字是强迫参数通过引用传递。

我们把  上例中的方法修改为  static void FunctionTest(int  [] arr,  ref  int x)  这样,调用的时  候
也加上  ref  即:functionTest(arrTemp, ref y);  执行后的结果就是 0,30,100,10。

注意:在调用有 ref参数的方法时,必须将参数要传递的参数提前初始化。但在调用 out参
数的方法时  ,就不必提前初始化。

3.out参数

输出参数不创建新的存储位置,而是使用其基础变量的存储位置。

4.参数数组

必须为一维数组,且必须为方法的最后一个参数,不能同时和ref或out一直使用。

5.方法的重载

重载:方法名相同,但参数类型和参数个数不能完全相同。

静态方法和实例方法

静态方法是类的方法,静态方法从类一创建好就存在。而实例方法是对象的方法,只能通过对象去调用。

虎方法和重写方法

虚方法是为了实现基类可以调用派生类的方法,若派生类没有重写虚方法,将使用基类的虚方法。虚方法用virtual修饰,虚方法在派生类中的实现叫重写方法。非虚方法不能重写。

namespace 示例chapter8

    {

    public class Program

    {

        public virtual void P1 ()                  //虚方法P1

        {

            Console.WriteLine("Program.P1");     //显示“Program.P1”字符串

        }

        public void P2()                            //非虚方法P2

        {

            Console.WriteLine("Program.P2");     //显示“Program.P2”字符串

        }

    }

    public class Test: Program

    {

        public override void P1()                //重写了Program类的虚方法P1

        {

            Console.WriteLine("Test.P1");       //显示“Test.P1”字符串

        }

        public void P2()                          //非虚方法P2

        {

            Console.WriteLine("Test.P2");      //显示“Test.P2”字符串

        }

    }

    public class T

    {

        static void Main()

        {

            Test t = new Test();

            Program p = new Program();

            Program program;     //声明一个基类的指针变量

            program = p;      

            program.P1();        //调用基类的P1方法

            program = t;

            program.P1();        //调用了继承类的方法P1()

            program.P2();        //调用了基类的非虚方法P2()

            Console.ReadLine();

        }

    }

}
密封方法

密封方法不能被派生类重写,用sealed修饰,在声明密封方法时,也必须添加override修饰符。

抽象方法

当实例方法声明包含abstract修饰符时,称该方法为抽象方法。抽象方法只能创建在抽象类中,且默认为虚方法,但在声明抽象方法时,不能使用virtual修饰符。

三、索引器

是一种特殊的属性,用this关键字指定。索引器始终是实例成员,不能用static修饰,必须通过索引来访问其元素。

public class Program

    {

        private string[] list;                    //元素类型为string的数组

        public string this[int index]             //声明索引器,索引为int类型

        {

            get { return list[index]; }         //获取list数组中的元素

            set

            {

                if (index > -1 && index < list.Length) list[index] = value;

                //设置list数组中的元素的值

            }

        }

        public Program(int count)                //构造函数

        {

            list = new string[count];            //为list数组分配内存

            for (int i = 0; i < count; i++)     //为list数组的每一个元素赋值

            {

                list[i] = i.ToString();

            }

        }

        static void Main()

        {

            int count = 100;

            Program p = new Program(count);

            for (int i = 0; i < count; i++)

            {

                //通过索引器访问p实例的list数组的元素,并显示在控制台

                Console.Write(p[i] + " ");

                if (i % 10 == 0) Console.WriteLine();

            }

            Console.ReadLine();

        }

    }

Main方法里通过访问实例p加下标来访问索引器的元素。

注意:虽然索引器和数组比较相似,但是索引器不属于变量,其元素不能作为ref或out参数传递。

你可能感兴趣的:(C#)