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

先说下类的成员,它分为数据成员和函数成员。数据成员,简单点可以理解成类的数据,包含了字段、常量(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处理,没有函数进出栈的性能损失。所以还是建议不要用公有字段了,给字段穿件衣服吧~~

C# 类属性封装、字段的详解的更多相关文章

  1. 007-Scala类的属性和对象私有字段实战详解

    007-Scala类的属性和对象私有字段实战详解 Scala类的使用实战 变量里的类必须赋初值 def函数时如果没参数可不带括号 2.不需要加Public声明 getter与setter实战 gett ...

  2. Dream------scala--类的属性和对象私有字段实战详解

    Scala类的属性和对象私有字段实战详解 一.类的属性 scala类的属性跟java有比较大的不同,需要注意的是对象的私有(private)字段 1.私有字段:字段必须初始化(当然即使不是私有字段也要 ...

  3. Solr系列三:solr索引详解(Schema介绍、字段定义详解、Schema API 介绍)

    一.Schema介绍 1. Schema 是什么? Schema:模式,是集合/内核中字段的定义,让solr知道集合/内核包含哪些字段.字段的数据类型.字段该索引存储. 2. Schema 的定义方式 ...

  4. (转)MySQL字段类型详解

    MySQL字段类型详解 原文:http://www.cnblogs.com/100thMountain/p/4692842.html MySQL支持大量的列类型,它可以被分为3类:数字类型.日期和时间 ...

  5. CSS中伪类及伪元素用法详解

    CSS中伪类及伪元素用法详解   伪类的分类及作用: 注:该表引自W3School教程 伪元素的分类及作用: 接下来让博主通过一些生动的实例(之前的作业或小作品)来说明几种常用伪类的用法和效果,其他的 ...

  6. ABAP程序系统字段中英文详解

    SY-SUBRC: 系统执行某指令后,表示执行成功与否的变量,’0’ 表示成功SY-DBLNT: 被处理过的记录的笔数 SY-UNAME: 当前使用者登入SAP的USERNAME;SY-DATUM: ...

  7. openerp经典收藏 字段定义详解(转载)

    字段定义详解 原文地址:http://shine-it.net/index.php/topic,2159.0.htmlhttp://blog.sina.com.cn/s/blog_57ded94e01 ...

  8. StringUtils类API及使用方法详解

    StringUtils类API及使用方法详解 StringUtils方法概览 判空函数 1)StringUtils.isEmpty(String str) 2)StringUtils.isNotEmp ...

  9. STC8H开发(二): 在Linux VSCode中配置和使用FwLib_STC8封装库(图文详解)

    目录 STC8H开发(一): 在Keil5中配置和使用FwLib_STC8封装库(图文详解) STC8H开发(二): 在Linux VSCode中配置和使用FwLib_STC8封装库(图文详解) 前面 ...

随机推荐

  1. 在Fedora20上安装Oracle 12c

    本文将引导大家在Fedora20的环境下成功安装Oracle12c. 安装前的准备 编辑/etc/hosts文件,添加本机名称 编辑/etc/selinux/config文件 编辑/etc/redha ...

  2. Linux 下安装oracle数据库

    原文出处       http://www.linuxidc.com/Linux/2015-02/113222.html 需要安装Oracle DataGuard,所以先要安装单台Oracle11g, ...

  3. java 时区处理机制(0时区转换到服务器时区)

    package com.globalroam.util; import java.util.Calendar; import java.util.Date; import java.util.Time ...

  4. CSS的权重(转)

    CSS写的渐渐多了,他的权重问题就不得不昂首面对,之前一直得过且过的将就用着,直到最近遇到了几个大坑,一直割刺着我对前端的热情,得了得了,蒙不过去了,就发点时间记下来吧,当然还是一片转载的文章,有时候 ...

  5. Log4net从下载到使用例子

    一.首先下载log4net.dll   http://pan.baidu.com/s/1gdigrwJ 二.添加log4net引用 三.代码: using System; using System.C ...

  6. php 和 apache的关系

    例如在客户端游览器输入他也回把这个地址传送到192.168.1.100里的apache里的,apache一看你传过来的是Php文件,如果在服务器没装php的情况下,他也会把这个文件打开,把里面的代码全 ...

  7. [原创]零基础R语言教程---第二课---R语言入门

    这节教程简单描述了R语言中常用的数据类型, 向量,字符串,矩阵,列表,数据框,以及附带了一个小例子 对于这节课所附带的例子需要做下列补充: 1.这个例子面向于对整列的数据进行预测 2.如果你需要求单行 ...

  8. 解决Sqlite UTF-8中文数据格式在DOS窗口下中文乱码

    问题如下图所示: 右键查看DOS属性:点击选项->当前代码页为GBK 只要将当前代码页编码值设置为UTF-8就可以了: ‘退出sqlite:.exit 输入:chcp 65001回车 右键属性: ...

  9. JVM virtual memory

    This has been a long-standing complaint with Java, but it's largely meaningless, and usually based o ...

  10. .Net XML操作 <第二篇>

    一.XML文件操作中与.Net中对应的类 微软的.NET框架在System.xml命名空间提供了一系列的类用于Dom的实现. 以下给出XML文档的组成部分对应.NET中的类: XML文档组成部分 对应 ...