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

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

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

    private int numberOfCows; 
      public int NumberOfCows
      {
             get
             {
                    return numberOfCows;
             }
             set
             {
                   numberOfCows = value;
                   BagOfFeed = numberOfCows * FeedMultiplier;
            }
     }

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

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

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

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

    如果是:

     public string Name { get; set; }

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

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

    要么生,要么死
  • 相关阅读:
    java框架
    MVC编程模式
    java各版本简单对比
    java设计模式
    ES中TF-IDF算法
    es分词器
    java应用零停机,时间索引重建(reindex)
    Spring源码由浅入深系列一 简介
    Spring源代码解析(收藏)
    spring源码读书笔记
  • 原文地址:https://www.cnblogs.com/llljpf/p/6773429.html
Copyright © 2011-2022 走看看