zoukankan      html  css  js  c++  java
  • 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参数传递。

  • 相关阅读:
    为什么构造函数内部不能调用虚函数
    偏差与方差
    rJava配置
    《商道》读书笔记
    在myeclipse中使用Java语言进行spark Standalone模式应用程序开发
    机器学习算法之旅【转】
    最流行的4个机器学习数据集【转】
    机器学习资源大全【转】
    机器学习算法基础概念学习总结【转】
    机器学习问题的十个实例【转】
  • 原文地址:https://www.cnblogs.com/yoomin/p/3497884.html
Copyright © 2011-2022 走看看