黑马程序员学习日记(2)--面向对象基础

来源:互联网 发布:淘宝贝高瞻幼儿园 编辑:程序博客网 时间:2024/05/22 09:51

---------------------- ASP.Net+Android+IO开发S、.Net培训、期待与您交流! ------------------------

面向对象基础

面向对象不是取代面向过程。它的三个特性:封装、继承、多态。面向对象知识简化开发,弥补面向过程的一些不足,实际上的思维方法还是面向过程。

面向对象的几个概念:类、对象。

类:一些具有相同事物特征的集合,这些特征属性的实例就是一个对象。类是抽象的,对象是具体的(instance实例)。类不占内存,对象才占内存。

类中包含了属性、字段和方法。

方法:方法就是类能够执行的动作。

类的继承:类之间可以有继承关系。如:电脑相对于电器只要有自己的字段、方法就可以了,所有电器都有的属性电脑就不用写了。电器是电脑的父类(ParentClass),电脑是电器的子类(ChildClass)。基类(Base),电器类从其他(家用电器类)继承,只要是父类从其它类继承过来的,其它类都是本子类的基类。

定义一个类:Class+类名{属性;方法;}

类声明完毕,要用这个类首先要对类初始化。

class Program    {        static void Main(string[] args)        {            Person p1 = new Person();//实例化一个对象            p1.gender = "男";            p1.name = "李记者";            p1.age = 22;            p1.SayHello();            Console.ReadKey();        }    }    //声明一个类    class Person    {        public int age;        public string name;        public string gender;        /// <summary>        /// 类的内部声明方法        /// </summary>        public void SayHello()        {            Console.WriteLine("大家好,我叫{0},我今年{1}岁了,我的性别是{2}性",this.name,this.age,this.gender);//this.表示我自己的****        }    }

 

成员的访问级别设置,

这样达到面向对象中封装的作用:public(任何地方都可以访问)、private(默认级别,只能由本类中的成员访问)。还有internal(内部成员,只在同一程序集的文件中才可以访问的)、protected(声明保护成员,只能被类内部和派生类的函数使用和修改)来那个级别。如果把类的属性或者方法改为private则只能在内部使用改变,外部实例无法改变、调用。用public或者用字段外部可以随意的修改类的属性,但是用private,可以在类的内部进行控制。

class Program    {        static void Main(string[] args)        {            Person2 p2 = new Person2();            //p2.name无法对private方法的属性赋值            p2.GiveNickName("张三");//通过类内部的方法控制,把值传递给里边的字段            Console.ReadKey();        }    }class Person2    {        public int age;        public int height;        private string name;//字段定义成了private后外部将不能调用        //外部不能直接给name赋值,但是可以通过类内部的方法控制,给他值,达到封装的目的        public void SayHello()        {            Console.WriteLine("我叫{0}",this.name);//类的内部可以调用private型的字段           }        public void GiveNickName(string nm)        {            //通过类内部的方法控制,给他值,达到封装的目的            if (nm == "张三")            {                return;            }            this.name = nm;        }    }


 

属性:

属性开头字母大写,字段开头字母小写。它定义了得到和修改相关字段的方法。

属性更充分地体现了类的封装性:不直接修改类的数据内容,而是通过访问其进行控制,借助Get方法和Set方法对属性的值进行读/写。

set(赋值),get(取值)先后顺序无所谓,value就代表用户赋值过来的值

static void Main(string[] args)        {             p3.Age = 20;            //Console.WriteLine(p3.Age);这样形成了死循环,并没有把值赋给age            Console.WriteLine("年龄{0}",p3.Age);//经过了set,字段age已经具有了值,然后get就可以取出,封装完成了            Console.ReadKey();        }class Person3    {         //属性        private int age;//字段        public int Age//Age不存值而是把值给了age        { //属性,set、get无先后顺序,以此达到封装的目的,省的每次都要写一个方法给一个private字段            get             {                return this.age;//取出这个类中private字段age的值            }            set            {                if (age <= 0)                {                    return;                }                this.age = value; //value是用户输入的值,把它赋给字段age             }                    }    }

 属性使用的注意事项:虽然属性和字段的使用方法类似,但是属性的本质是方法,因此不能把属性当成变量,一些使用变量的地方不能使用属性,例如:不能把属性作为函数的引用型参数或输出参数。

-------------------- ASP.Net+Android+IO开发S、.Net培训、期待与您交流! ----------------------

原创粉丝点击