zoukankan      html  css  js  c++  java
  • C# 类属性封装、字段的详解

       今日敲代码时,突然感觉对类的属性封装、字段有点犯迷糊了。。连基础的都不知道了,那敲的代码怎么能严谨高效的。果断拿起各种高级编程、大全啥的翻起来~~这不再把自己的理解写下来(定义都是直接抄书的),献给同样迷糊的小伙伴。

        先说下类的成员,它分为数据成员和函数成员。数据成员,简单点可以理解成类的数据,包含了字段、常量(const)、事件;函数成员,就是操作类中的数据,包含方法、属性、构造函数、终结器(析构函数)、运算符、索引器。(就提一下,方便后面说下去,要都解释就偏题了)字段就是类里定义的变量,而属性则是字段的拓展。所以在使用属性前要结合一个正常的字段声明,这个字段称为属性的后备字段(backing field):

     1 private int numberOfCows; 
     2 public int NumberOfCows
     3 {
     4        get
     5        {
     6               return numberOfCows;
     7        }
     8        set
     9        {
    10               numberOfCows = value;
    11               BagOfFeed = numberOfCows * FeedMultiplier;
    12        }
    13 }

    读取NumberOfCows字段时会运行get方法,返回私有字段numberOfCows。而设置NumberOfCows字段时,会调用set方法,看上去这个方法没有参数,其实value就是它的参数,其中包含为这个字段设置的值。其实这就是用属性来对字段进行封装(这就是封装啦)。

    使用封装还可以实现对属性的只读、只写:

    1 public string Name { get; private set; }//只读
    2 public string Name { private get; set; }//只写

    这样写属性时,编译器会自动创建private string name。这种是会自动实现后备成员变量的自动实现属性。

    如果是:

    1 public string Name { get; set; }

    这样的没有啥限定的属性,其实和公有字段没多大区别了。

    但是从面向对象的角度来讲,公开的是方法,而不是字段哦。而且微软也推荐:所有的字段都设置为私有字段,如果要使用它们,则把它们封装成属性。对于这样简单的set或get,编译器会自动进行inline处理,没有函数进出栈的性能损失。所以还是建议不要用公有字段了,给字段穿件衣服吧~~

  • 相关阅读:
    蓝书·目录
    CSPs-2019·爆零游记
    [原创题目]Uncomplicated Card Recreation
    珂朵莉树(ODT)
    CF407B 「Long Path」
    Manacher(马拉车)
    CSPs-2020 游记
    STM32CubeMX的使用(以点亮闪烁LED为例)
    基于STM32CubeMX的定时器设置
    STM32的中断系统和外部中断(基于STM32CubeMX开发)
  • 原文地址:https://www.cnblogs.com/WMTcore/p/3843343.html
Copyright © 2011-2022 走看看