黑马程序员_C#面向对象(概念,访问级别,属性)

一.面向对象的概念:

1.面向对象的三个特性:封装,继承,多态。

2.面向对象的几个基本概念:类,对象,字段,方法,类的继承;类是抽象的,对象是具体的,字段就是类的状态,人这个类有姓名,年龄,身高等字段,方法(Method)是类能够执行的动作,比如问好,吃饭等,类之间有继承关系,比如“电脑”类可以从“电器”类继承,这样的好处是“电脑”类 只需定义自己特有的字段,方法就可以了。

3.类的继承:父类(Parent),基类(Base),电脑类是电器类的子类(ChildClass),重用。

4.如何定义一个类:

namespace 定义类

{

    class Program

    {

        static void Main(string[] args)

        {

            //实例化对象

            Person p1 = new Person();

            //给对象的字段赋值

            p1.Name = "jinpeng";

            p1.Height = 168;

            p1.Age = 21;

            //调用对象的方法

            p1.SayHello();

            Console.ReadKey();

        }

    }

    //定义一个类

    class Person

    {

        //定义字段,修饰符为public 

        public string Name;

        public int Age;

        public int Height;

        //定义方法,修饰符为public

        public void SayHello()

        {

            Console.WriteLine("大家好,我叫{0},我的身高是{1},我的年龄是{2}",this.Name,this.Height,this.Age);

            //this.**===我自己的***

        }

        

    }

}

 

 

二.成员访问级别

1.字段,方法,属性都可以叫做类的的成员Member,他们都需要定义访问级别,访问级别的用处在于控制成员在哪些地方可以被访问,这样达到面向对象中“封装”的目的。

2.几个访问级别:public(任何地方都可以访问);private(默认级别,只能由本类中的成员访问)

三.属性

1.惯用法:属性开头字符大写,字段开头字符小写

namespace 属性

{

    class Program

    {

        static void Main(string[] args)

        {

            //实例化p1

            Person p1 = new Person();

            //对对象p1的Name属性(看清楚,是属性,并不是字段)进行赋值

            p1.Name = "jinpeng";//这里的jinpeng相当于value传到p1.name字段中

            Console.WriteLine("我叫{0}",p1.Name);

            Person p2 = new Person();

            p2.Name = "二球";

            Console.WriteLine("我叫{0}",p2.Name);

            Person1 p3 = new Person1();

            //由于p3.Age获取不到值,只能返回值,就是说你爱给什么给什么,我只返回我的3

            p3.Age = 30;

            p3.Age = p3.Age + 1;

            Console.WriteLine(p3.Age);

            Console.ReadKey();

        }

    }

    //写一个类Person

    class Person

    {

        //属性开头字符大写,字段开头字母小写

        private string name;//字段

        public string Name//属性Name本身没有存数据,都是保存到name中了

        {

            set //赋值

            {

                if (value == "二球")

                {

                    //看看:这里就说明问题了,如果是定义字段为public ,虽然可以直接进行赋值,但是当赋的值有问题(可能非法,比如年龄小于0,大于200等),

                    //不能做出对于的处理,很不完善,相反,通过属性get,set可以判断是否合法,如果不合法可以做出相应处理,这就是属性比直接定义字段为public更优势的地方,

                    //所以,在以后的编写过程中,要注意到这个问题,并且使用属性,不用public来对类进行字段修饰。

                    //1.this.name = "你的姓名有问题!";

                    return;//直接return的话,直接返回,不进行赋值,更取不到值,所以为空,但是不报错

                }

                this.name=value;//value代表用户赋值来的值

            }

            get //取值

            { 

                return this.name;

            }

        }

    }

    //写一个特殊点的类Person1

    class Person1

    {

        //没有定义字段,我只定义了一个属性Age,得不到值,只能返回值

        public int Age

        {

            set { }

            get

            {

                return 3;

            }

        }

    }

    //再写一个特殊点的类Person2,经常会犯的错误

    //把值传给属性Age,Age再传给Age,再传。。。。必定死循环

    //注意书写不能有误!

    class Person2

    {

        private int age;//字段

        public int Age//属性

        {

            set

            {

                this.Age = value;//将value传到了属性Age中

            }

            get

            {

                return this.Age;

            }

        }

    }

}

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值