zoukankan      html  css  js  c++  java
  • C#篇(一)——字段与属性

    字段和属性有什么区别?

        class Student
        {
            private int age;
            public int Age
            {
                get
                {
                    return age;
                }
                set
                {
                    age = value;
                }
            }
        }
    

    你有没有想过:为什么要有属性?为什么不直接将字段设置为公有?
    简单的总结:属性更像是方法,用属性来代替直接访问字段可以有更好的逻辑控制。
    比如:

        class Student
        {
            private int age;
            public int Age
            {
                get
                {
                    return age;
                }
                set
                {
                    if(age > 0 && age < 200)
                    {
                        age = value;
                    }
                    else
                    {
                        throw new Exception("年龄不合法");
                    }
                }
            }
        }
    

    当然也可以通过属性来限制只能设置或获取某一个字段的值。

    一个属性是否必须和一个字段相对应?答案是不一定。

        class Student
        {
            private int age;
            public int Age
            {
                get
                {
                    return 0;
                }
                set
                {
                   //...
                }
            }
        }
    

    自动实现的属性,实现的原理?
    在c#中可能会经常看到类似下面的属性:

        class Student
        {
            //自动实现的属性
            public int Age{ get; set; }
        }
    

    那它的内部实现机制呢?————单独的属性是不能存储数据的,数据都保存在字段中。
    这是C#提供的一种简单的语法,称为自动实现的属性,声明属性而不提供get/set方法的实现,C#会自动的声明一个私有字段(编译器幕后做的工作)。在本例中,字段类型是int,也就是属性的类型。另外,编译器会自动实现get_Age和set_Age方法,分别返回和设置字段中的值。
    get_Age和set_Age从哪来?
    下一篇 C#篇(二)——属性的实质 我们再做分析。

  • 相关阅读:
    KVC的取值和赋值
    OC中属性的内存管理
    mysql的通信协议
    Proactor模式&Reactor模式详解
    Linux异步IO学习
    Redis 分布式锁的实现原理
    redis过期键
    智能指针
    std::unique_lock与std::lock_guard
    手撕代码
  • 原文地址:https://www.cnblogs.com/forcheng/p/6483919.html
Copyright © 2011-2022 走看看