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参数传递。

原文地址:https://www.cnblogs.com/yoomin/p/3497884.html