• 章节:156
  • 访问:1222
  • 时长:00:32:28
  • 日期:2016-10-10 11:18

我们之前讲过结构体,结构体里面也有一些单独的元素

那么这里类的属性和字段也类似

我们可以通过属性和字段访问对象中包含的数据,同一个类的不同对象的属性和字段存储不同的值

比如同样是人类的小明和小花的身高字段和属性就不一样了

现在定义一个叫CpuOfCoffee的咖啡类

那么咖啡的牌子 是否加牛奶和方糖 师傅即溶 这些就是咖啡类的属性

有了这些属性,那么就有不同的对象了

比如加不加牛奶和方糖数量 就是不同的对象

属性和字段也是其他的类型,比如string int 甚至还可以是其他的class类型对象

属性和字段是不同的

因为属性是不提供对数据的直接访问

对象能让用户不考虑数据的细节


字段和属性

字段再类中通常像下面的定义

private string name;

如果我们希望再类的外面访问name,那么就需要改成下面的

public string name;

虽然我们可以不受限制地访问这些字段,只要它是public 或者protect 但是我们却无法做到这样

比如我们现在给人类person 的class 天津

public int age;

我们可以访问和修改age的值

但是我们却无法限制这个值不能少于0或者大于150

单单靠字段是做不到的

有了属性后,我们就可以做到


属性是包含两个块:set和get

set负责属性的写入工作

get负责属性的读取工作;

在set和get的块中,我们可以做一些操作

如set中可以检查是否符合要求,是否进行赋值

当缺少get或者set其中一个的时候,那么就是只读或者只写,如果没有get也没有set的属性是没有意义的

class Person

{

    private int age;

    public int Age

    {

        get{return age;}

        set

        {

            if(value>0||value<=150)

            {

                this.age = value;

            }

            else

           {

                 throw new Exception("值的范围不合法。");

           }

        }

    }

}

属性没有存储字段的功能,数据是存储在字段中的,所以只有修改字段的数据才能更改数据,修改属性是没用的


using System;using System.Collections.Generic;using System.Text;namespace Demo50
{    class Program
    {        //北盟网校 www.bamn.cn        static void Main(string[] args)
        {            string abc = "";
            Person xiaoMing = new Person();
            xiaoMing.Name = "小明";//这个小明的字符串最后等于set里面的value            Console.WriteLine(xiaoMing.Name);            try
            {
                xiaoMing.Age = 190;
                Console.WriteLine(xiaoMing.Age);
            }            catch (Exception ex)
            {
                Console.Write(ex.Message);
            }
            Person xiaoHua = new Person();
            Console.ReadKey();
        }
    }    // 定义了一个叫Person的类型    class Person
    {        private string name;//字段通常是这样定义 私有private        private int age;        private double height;        public string Name//定义属性        {            get
            {                return name;
            }            set
            {                this.name = value+" 欧巴马";//value又是一个关键字 它的意思是外部的赋值的那个值            }
        }        public int Age
        {            get { return age; }            set {                if (value>150||value<=0)
                {                    throw new Exception("值不合法");
                }                else
                {                    this.age = value;
                }
            }
        }
    }
}