[Day23]C# 鸡础观念- 物件导向(oop)~属性(Property)

每天都在思考,
如果事情自己会做好就好了,
程序自己会自动检查就好了,
今天C#也有自动检查变数是否符合要求的功能,
我们有请属性!

访问器 (Assessor)/images/emoticon/emoticon51.gif

  • 把变数改为私用private int age;
  • 并加入两行限制

范例:我们建立一个狗的类别做练习

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace CsharpDemo
{

    class Program
    {
        static void Main(string[] args)
        {
            Dog dog = new Dog();
            //设定为三岁
            dog.SetAge(3);
            Console.WriteLine(dog.GetAge());

            //设定为-1岁
            dog.SetAge(-1);
            Console.WriteLine(dog.GetAge());

            Console.ReadKey();
        }
    }
    //狗的类别
    class Dog
    {
        //名称
        public string name;
        //年龄
        private int age;

        //设定年龄
        public void SetAge(int ageValue)
        {
            //如果年龄为负数就改成0
            if (ageValue <= 0)
            {
                age = 0;
            }
            else
            {
                age = ageValue;
            }
        }
        //回传设定後的年龄
        public int GetAge()
        {
            return age;
        }
    }
   }

结果:

3
0

※访问器虽然解决了问题,但大家还是习惯把年龄作为变数使用。
属性就是这而生的

属性(Property)/images/emoticon/emoticon33.gif

  • 属性的好处:
    • 有封装性
    • 可以进行合法性的检查
    • 符合变数的使用方式
  • 用法:
    • 习惯将变数命名成小写,属性命名为大写
  • 定义了 get 与 set 两个访问器 
    ➀get访问器用来读取变数的值
    ➁set访问器用来修改变数的值

范例:我们来建立一个鸭子类别来练习吧

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace CsharpDemo
{

    class Program
    {
        static void Main(string[] args)
        {
            Duck duck = new Duck();
            //设定为三岁
            duck.duckAge = 3;
            Console.WriteLine(duck.duckAge);

            //设定为-1岁
            duck.duckAge = -1;
            Console.WriteLine(duck.duckAge);

            Console.ReadKey();
        }
    }
    /// <summary>
    /// Day23-02
    /// 鸭的类别
    /// </summary>
    class Duck
    {
        //名称
        public string name;
        //年龄
        private int age;
        //属性
        public int duckAge
        {
            get//回传值
            {
                //回传设定後的值
                return age;
            }
            set //设定值
            {
                if (value <= 0)
                {
                    age = 0;
                }
                else
                {
                    age = value;
                }
            }
        }
    }
  }

结果:

3
0

属性解决了我们喜换用变数,又可以自动检查,并且又具有封装性,一次解决三种问题


<<:  [重构倒数第07天] - 不用靠後端的 client 端上传图片预览图

>>:  [Part 3 ] Vue.js 的精随-元件 provide/inject

for 回圈基本要点

for回圈(英语:for loop)在计算机科学是一种程序语言的迭代陈述,能够让程序码反覆的执行。 ...

Day26-实作(列表区) (part1)

要对个别的元件做更多的指令之前,需要先把他们个别的拆出来,第一个拆解的是列表的部分,先在compon...

Day 2 - CSS + JS Clock

前言 JS 30 是由加拿大的全端工程师 Wes Bos 免费提供的 JavaScript 简单应用...

魔法实作 - todolist

前情提要 艾草:「もうだめだ。我已经没有梗了,不行了...」 「艾草,醒醒!我们不是说好要一起征服这...

Day14:内建的 suspend 函式,好函式不用吗? (3)

这是我们内建的 suspend 函式第三篇,让我们看看有哪些吧: joinAll() 还记得 joi...