C#中的属性

文章目录

    • 1 C#中的属性
      • 1.1 属性的使用
      • 1.2 属性的定义
      • 1.3 属性的特性--扩展业务逻辑
      • 1.4 属性的扩展--控制读写操作
    • 2 字段和属性的总结

1 C#中的属性

1.1 属性的使用

作用: 在OOP中主要用来封装数据。
要求: 一般采用Pascal命名法,数据类型要和字段一致,使用public修饰。

1.2 属性的定义

C#中的属性_第1张图片
读取: 属性通过get方法,返回私有字段的值。
赋值: 属性通过set方法,借助于value给私有字段赋值。
本质: 属性本身,其实没有保存数据,而字段才是真正数据的存储单元。

class Course1
    {
        //C#2.0时代的标准属性
        private int courseId = 0;
        public int CourseId
        {
            get { return courseId; }
            set { courseId = value; }
        }

        //C#3.0时代,对标准属性的简化(以后,标准属性,都可以这样用)
        public string CourseName { get; set; }

        //C#4.0时代,增加的属性表达式(一般不这么用,还是使用上面的简写)
        private int unitPrice = 4000;
        public int UnitPrice { get => unitPrice; set => unitPrice = value; }

        //C#4.0时代,我们可以这样直接赋值(以后我们开发的版本,最低都是4.0的)
        private string Type { get; set; } = "系列";

        private DateTime FirstDate { get; set; }  //首发时间

        //公有方法
        public string ShowCourseInfo()
        {
            //局部变量
            string info = $"课程名称:{CourseName} 课程编号:{CourseId}  课程价格:{UnitPrice}";
            //方法返回值
            return info;
        }
    }

1.3 属性的特性–扩展业务逻辑

我们可以在get和set方法中添加业务逻辑。

C#中的属性_第2张图片

1.4 属性的扩展–控制读写操作

我们可以根据需要设置位只读属性。
C#中的属性_第3张图片

class Course3
    {
        private int courseId = 0;
        public int CourseId
        {
            get { return courseId; }
           // get { return CourseId; }  //属性常见错误:没注意大小写,导致死循环!
            set
            {
                if (value < 0)
                    courseId = 1000;
                else
                    courseId = value;
            }
        }
        //只读属性1,直接去掉set方法,可以在定义的时候初始化
        public string CourseName { get; } = "课程";

        //只读属性2,直接去掉set方法,并在get中添加业务逻辑
        public string CourseInfo
        {
            get { return $"课程名称:{CourseName} 课程编号:{CourseId} "; }
        }

        /// 
        /// 这个是方法!不是属性!
        /// 
        /// 
        public string ShowCourseInfo()
        {        
            return $"课程名称:{CourseName} 课程编号:{CourseId} ";          
        }
    }

2 字段和属性的总结

字段(成员变量):

  • 内容使用:字段主要是为类的内部数据交换使用,字段一般都是private。
  • 数据存储:字段只是用来存储数据,如果不是静态字段,生命周期和对象共存亡。
  • 读写不限:我们可以给字段赋值,也可以获取字段的值(非常常用)(readonly除外)。

属性(字段封装):

  • 外部使用:属性一般是向外提供数据访问,属性是public修饰,用来对外表示对象的静态特征。
  • 业务扩展:属性内部可以添加我们需要的业务逻辑,可以避免非法数据,或完成其他相关任务。
  • 读写控制:属性可以根据需要设置为只读属性,更好的体现面向对象的“封装特性”,也就是安全性。

使用:

  • 常规化使用:对象本身的“对外”数据保存,都是通过属性完成的,调用者都可以使用。
  • 强制性使用:公有化字段,在很多时候是无法被解析的(比如dgv,combox的显示问题)。

你可能感兴趣的:(C#)