黑马程序员_C#面向对象(值类型和引用类型,构造函数,常量与静态成员,命名空间,索引)

时间:2021-09-19 12:20:40

四.值类型和引用类型

namespace 值类型和引用类型

{

    class Program

    {

        static void Main(string[] args)

        {

            //int,datetime,bool,char等都属于值类型(ValueType),占的内存很小,它的值是可以直接进行拷贝传递的

            int i = 10;

            int j = i;

            i++;

            Console.WriteLine(j);

            Console.WriteLine(i);

            //普通对象,函数,则是引用类型,控制的是同一片区域,赋值的时候是传递引用

            Person p1 = new Person(18);

            Person p2 = p1;//p2指向p1指向的对象

            p1.Age++;

            Console.WriteLine(p1.Age);

            Console.WriteLine(p2.Age);

            Console.ReadKey();

        }

    }

    class Person

    {

        //属性

        public int Age

        {

            get;//在.Framework3.0以后,就可以直接省去私有字段和get,set代码段了

            set;

        }

        //构造方法

        public  Person(int age)

        {

            this.Age = age;

        }

 

    }

}

五.构造函数

1.作用:在创建一个对象的时候,将其初始化;

2.构造函数是用来创建对象的特殊函数,函数名和类名一样,没有返回值(没有void);

3.构造函数可以有参数,new 对象的时候传递函数参数即可;

4.构造函数可以重载,也就是有多个参数不同的构造函数;如果不指定构造函数,则类中有一个默认的无参构造函数,如果指定了构造函数,则不再有默认的无参构造函数,如果需要无参构造函数,则需要自己来写;

5.定义一个常量的方法:

六.常量与静态成员

1.全局常量: public const double pi=3.12 ;//在Math类中有这个常量,直接就能调用。

Const常量,常量名要大写,一定不会变化的值才能声明为常量。

2.全局变量:static 类变量

3.不用new就能用的方法:static方法,static方法其实就是普通函数;

4.在static方法中可以调用其他static成员,但是不能调用非static成员,在非static方法中可以调用static成员;

5.静态类,不能被new的类就是静态类。静态类一般用来实现一些函数库,***Help这样的,如SqlHelper,PageHelper等

namespace 静态类

{

    class Program

    {

        static void Main(string[] args)

        {

            ConsoleHelp.SayHello();

            Console.ReadKey();

        }

}

//静态类不能被实例化,可直接使用,在后面要用到的SqlHelper中有很好的使用

    static class ConsoleHelp

    {

        public static void SayHello()

        {

            Console.WriteLine("你好,我是静态类中的静态方法");

        }

    }

}

七.命名空间

1.同一文件夹下的.cs文件,命名空间可以不同,这在后面做项目的时候,要把一个类复制或移动到另一个文件夹下,一定要记得改命名空间!!!

2.如果要使用的类和当前的类不在同一个namespace,则需要添加using引用

3.自己总结:在同一个命名空间下的类(加不加public 都可以),都可以通过实例化进行使用,如果不在同一命名空间下面,则需要引用命名空间

八.索引

1.C#中提供了按照索引器进行访问的方法

2.定义索引器的方法:

//string 为索引器的类型,[]中是参数列表,进行索引器写操作就是调用set代码块,在set内部使用value得到用户设置的值,进行读操作就是执行get代码块;

3.索引器参数可以不止一个,类型也不限于Int,几乎可以是任意类型的。

String this[int index]

{

   Set{}

   Get{return “”;}

}

namespace 索引

{

    class Program

    {

        static void Main(string[] args)

        {

            Person p1 = new Person();

            p1[1] = "老大";

            Console.WriteLine(p1[1]+p1[2]);

            Console.WriteLine(p1["靳鹏",3,4]);

            Console.ReadKey();

        }

    }

    class Person

    {

        //属性和索引器都可以是只读,或者只写,或者可读可写

        private string FirstName="大毛";

        private string SecoundName="二毛";

        //索引不至只能是int类型

        public string this[string name, int x, int y]//string索引器的数据类型

        {

            //只读索引器

            get

            {

                return name + x + y;

            }

        }

        //以int类型作为索引的索引器

        public string this[int index]

        {

            set

            {

                if (index == 1)

                {

                    this.FirstName = value;

                }

                else if (index == 2)

                {

                    this.SecoundName = value;

                }

                else

                {

                    throw new Exception("错误的序号");

                }

            }

            get

            {

                if (index == 1)

                {

                    return this.FirstName;

                }

                else if (index == 2)

                {

                    return this.SecoundName;

                }

                else

                {

                    throw new Exception("没有这个");

                }

            }

        }

    }

}