美文网首页C#
面向对象(二)-构造函数与属性

面向对象(二)-构造函数与属性

作者: 元宇宙协会 | 来源:发表于2017-11-18 19:53 被阅读111次

1.构造函数

  • 定义:
    当我们使用类通过new关键字来创建一个对象的时候,其实是调用了这个类的构造方法。
  • 语法:
    通过实现一个跟类名一样,但不带返回类型的的方法,来写构造方法。

不带参数的构造函数称为“默认构造函数”。 无论何时,只要使用new运算符实例化对象,并且不为 new提供任何参数,就会调用默认构造函数。

案例一:调用构造函数,但是不传递参数

public class Car
{ 
    public int speed;
    public Car() 
    { 
        speed = 50;
    }
 }

class Program
{
     static void Main()
     {
          Car car = new Car(); 
          Console.WriteLine(car.speed); 
    }
}

案例二:通过构造函数,传递初始值。

public class Car
{ 
    public int wheels;
    public int speed;
    public int weight;
    public Car(int speed, int weight) 
    { 
        wheels = 4;
        this.speed = speed; // 通过this来访问当前类的字段。而不是传递过来的值
        this.weight = weight;
    }
 }

class Program
{
     static void Main()
     {
          Car car = new Car(200,5); 
          Console.WriteLine(car.speed, car.weight); 
    }
}
  • 注意点
    方法的标识符可以一样,但是参数的数据类型的顺序不可以一致。
       public Person()
        {
            Console.WriteLine("1调用了Person的构造方法");
        }

        public Person(string name, int age)
        {
            this.name = name;
            this.age = age;

            Console.WriteLine("2调用了有name和age的构造方法");
            Console.WriteLine("名字是:{0},年龄是:{1}", name, age);
        }

        public Person(string aaa, int bbb)  // 这里会出现错误,会跟上面的方法分不清楚调用哪个、
        {
            //this.name = name;
            //this.age = age;

            //Console.WriteLine("2调用了有name和age的构造方法");
            //Console.WriteLine("名字是:{0},年龄是:{1}", name, age);
        }

        public Person(int age, string name)
        {
            this.name = name;
            this.age = age;

            Console.WriteLine("3调用了有age和name的构造方法");
            Console.WriteLine("名字是:{0},年龄是:{1}", name, age);
        }

2.属性

  • 定义
    属性结合了字段和方法的多个方面。 对于对象的用户,属性显示为字段,访问该属性需要相同的语法。 对于类的实现者,属性是一个或两个代码块,表示一个get访问器和/或一个set访问器。
    当读取属性时,执行get访问器的代码块;当向属性分配一个新值时,执行set访问器的代码块。
    不具有set访问器的属性被视为只读属性。
    不具有get访问器的属性被视为只写属性。 同时具有这两个访问器的属性是读写属性。

  • 用途
    属性具有多种用法:它们可在允许更改前验证数据;
    当数据被更改时,它们可采取行动,例如引发事件或更改其他字段的值。

  • 语法
    public class Date
    {
        private int month; 

        public int Month
        {
            get
            {
                return month;
            }
            set
            {
                if ((value > 0) && (value < 13))
                {
                    month = value;  //value是外界赋的值
                }
            }
        }
    }


  • 属性的几种写法
class People
{        // 年龄
        private int _age;
        public int Age
        {           
            // set是赋值访问器            
            // Value 表示外界赋给_age的值
             set
            {
                _age = value; // 默认就是这样的写法
            }
            // get是取值访问器
            get
            {
                return _age; // 返回_age
            }


        public int hours
        {
            // 如果没有写Set方法(写了get方法),那么就表示只读。只能调用get方法
            // 如果没有写get方法(写了set方法),那么表示只能赋值,不能查看
            get
            {
                return 10;
            }
        }
        // 简写方式: 表示将属性的set方法与get方法都写了
        public int muise
        {
            get; set;
        }
        // 如果使用这种最简单的写法,就表示必须先给字段赋值(即调用set方法,给字段赋值操作),
        // 然后才能取值(即调用get方法)
        public int leichao;
}

  • 注意点
    属性可以只写get块或set块。
    如果只写get不写set,那么就不能再外面赋值了。 如果只写set不写get,那么就不能在外界读取了。
    可以给set或者get设置访问修饰符,来限制调用范围。
    可以什么都不写,如果使用最简单的写法,就表示必须先给字段赋值(即调用set方法,给字段赋值操作)然后才能取值(即调用get方法),否则取出来的值为空。

  • 练习题目
用面向对象的思维去完成下面的题

游戏中,有玩家,每个玩家有昵称,ID,游戏职业(法师、战士、射手。。。),血量,物攻,法伤,物抗,法抗,。

游戏中,还有装备,装备有物理防御、法术防御、物理攻击力,法术攻击力,血量。 玩家拥有装备后,可以提升自己的能力。


游戏中,还有多个怪物,怪物有血量,物攻,法伤,物抗,法抗,Boss的法伤,物攻和物抗,法抗,血量比较高,小兵的比较低。

玩家打怪物,怪物打玩家。 

血量减少的值等于被攻击的值减去自身的抗性。
如: 玩家1的物理攻击是800,法术攻击是300,怪物的物理防御是600,法术防御是500, 玩家打怪物一下,怪物的血量减少200.

玩家打怪物两下,怪物打玩家一下,可以多个玩家打一个怪物。

无论是玩家还是怪物,当血量为0的时候则 死亡。

要求游戏职业定义为枚举、还要用到构造函数。

相关文章

  • 面向对象(二)-构造函数与属性

    1.构造函数 定义:当我们使用类通过new关键字来创建一个对象的时候,其实是调用了这个类的构造方法。 语法:通过实...

  • 对于面向对象的一点理解

    对于面向对象,我的理解是第一先构造函数,第二往这个构造函数自带的prototype属性里添加属性,第三,new这个...

  • 2018-11-23 面向对象4 ES6

    面向对象补充: JavaScript 通过构造函数生成新对象,因此构造函数可以视为对象的模板。实例对象的属性和方法...

  • 原型概念

    神秘对象称与构造函数 神秘对象就是构造函数的 "原型属性"简称原型 (构造函数的原型) 神秘对象与构造函数所创建出...

  • 面向对象继承复习

    js基础的面向对象的继承 构造函数继承 这种方法的缺陷是只会继承构造函数上的实例属性,并不会继承原型对象上的属性,...

  • 2018-11-22

    JavaScript的面向对象是基于constructor(构造函数)与prototype(原型链)的。 构造函数...

  • 22

    JavaScript的面向对象是基于constructor(构造函数)与prototype(原型链)的。 构造函数...

  • 面向对象2

    JavaScript的面向对象是基于constructor(构造函数)与prototype(原型链)的。 构造函数...

  • OOP-2

    JavaScript的面向对象是基于constructor(构造函数)与prototype(原型链)的。 构造函数...

  • 01 面向对象

    -------------------【面向对象】------- ----《构造函数》--- 简介:所有的构造函数...

网友评论

    本文标题:面向对象(二)-构造函数与属性

    本文链接:https://www.haomeiwen.com/subject/yekyvxtx.html