今日敲代码时,突然感觉对类的属性封装、字段有点犯迷糊了。。连基础的都不知道了,那敲的代码怎么能严谨高效的。果断拿起各种高级编程、大全啥的翻起来~~这不再把自己的理解写下来(定义都是直接抄书的),献给同样迷糊的小伙伴。
先说下类的成员,它分为数据成员和函数成员。数据成员,简单点可以理解成类的数据,包含了字段、常量(const)、事件;函数成员,就是操作类中的数据,包含方法、属性、构造函数、终结器(析构函数)、运算符、索引器。(就提一下,方便后面说下去,要都解释就偏题了)字段就是类里定义的变量,而属性则是字段的拓展。所以在使用属性前要结合一个正常的字段声明,这个字段称为属性的后备字段(backing field):
private int numberOfCows;
public int NumberOfCows
{
get
{
return numberOfCows;
}
set
{
numberOfCows = value;
BagOfFeed = numberOfCows * FeedMultiplier;
}
}
读取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处理,没有函数进出栈的性能损失。所以还是建议不要用公有字段了,给字段穿件衣服吧~~
相关推荐
### C#类成员详解:字段、属性、方法、事件 #### 字段:数据的封装与存储 在C#中,**字段**是类内部用于存储数据的成员,它允许类封装状态信息,使得对象能够拥有自己的数据。字段可以是任何数据类型,包括基本...
1. C#基础概念:文档涉及的C#类定义,包括面向对象编程中类的创建,成员变量、方法和属性的使用。 2. 图形绘制与打印技术:文档提到了使用GDI+图形设备接口进行图形绘制和打印的相关技术。GDI+是.NET Framework中用...
通过属性,可以在外部直接以字段的方式访问类的私有成员,但实际上底层仍然是通过`get`和`set`方法进行访问的。这种方式不仅提供了与字段相似的简单语法,还能保持封装的优点。 **只读属性:** ```csharp using ...
C#是完全面向对象的编程语言,支持类、对象、封装、继承、多态等核心概念。类是对象的蓝图,可以包含字段(成员变量)和方法(成员函数)。继承使得子类可以扩展或重写父类的属性和行为,而多态则允许使用一个基类...
书中会详细解释如何定义类,包括字段(成员变量)、属性、方法等,以及如何实例化对象和调用其成员。 2. 控制流语句:包括条件语句(if、else、switch)、循环(for、while、foreach)和跳转语句(break、continue...
- **公有属性**:`X` 和 `Y`,它们提供对私有字段的访问控制,允许外部代码读取和设置点的坐标,而无需直接访问私有字段。 - **构造函数**:一个带有参数的构造函数,用于初始化点的坐标,通常接受两个`double`...
- 类与对象:创建类、对象,理解封装、继承和多态的概念。 - 构造函数:掌握默认构造函数和自定义构造函数的使用。 - 访问修饰符:public、private、protected、internal的权限控制。 - 属性与字段:了解属性...
属性是C#编程语言中一个重要的特性,它作为类的成员,提供了对私有字段的封装和控制。属性提供了一种灵活且安全的方式来访问和修改数据,确保了数据的完整性和安全性。以下是对属性的详细解释: 1. **属性的定义**...
### C# 下海康DVR-DVS客户端SDK封装解析 #### 概述 在软件开发领域,特别是视频监控系统开发中,与硬件设备的交互往往需要通过特定的API来实现。对于海康威视(Hikvision)这样的硬件制造商提供的设备而言,其原生...
11. 属性、索引器和扩展方法:这些特性为类增加了额外的功能,比如属性提供了一种访问字段的简便方式,索引器使得类可以像数组一样被访问,而扩展方法则允许在不修改原有类的情况下为其添加新功能。 12. C# 8.0及...
本文将深入探讨如何在C#类中获取并记录数据变化的属性信息。首先,让我们了解一下这个问题的背景。 在传统的做法中,当用户修改数据时,我们可能会将整个对象序列化为JSON字符串并存储在日志中。然而,这种方法并不...
在本篇文章中,我们将深入探讨一个专门用于操作ACCESS数据库的C#类——`DbHelperACE`。 #### `DbHelperACE`类介绍 `DbHelperACE`类是基于SQLHelper修改版构建的,主要目标是提供一套简单、高效且易于使用的API来...
- **属性**:用于访问和修改私有字段的公共接口。 - **事件**:允许对象之间通信的机制。 - **操作符**:用于执行特定运算的符号,如+、-、*、/等。 - **索引**:一种特殊的成员,用于通过下标访问类中的元素。 - **...
- **属性**: 提供了访问类的字段的简洁方式,看起来像是公共字段,但实际上是一个 getter 和 setter 方法。 - **事件**: 用于表示某种状态的变化,允许对象之间传递消息。 - **操作符重载**: 允许自定义类型支持标准...
在C#编程语言中,属性(Property)是一个重要的特性,它提供了一种安全且灵活的方式来存取类的私有字段值。属性本质上是封装了getter和setter方法的特殊成员,通常用于模拟公有数据成员,但又具备更好的控制和安全性...
- C#支持面向对象编程的所有关键特性,包括封装、继承和多态。 #### 二、类和对象的深入探讨 - **成员**: - 类可以包含各种成员,如字段、方法、属性等。 - 成员可以在类内部定义,并可以通过对象来访问。 - *...
- **属性(Properties)**:提供对字段的封装,提供访问控制和验证。 - **索引器(Indexers)**:允许通过类似数组的方式访问类的成员。 - **运算符重载**:可以自定义类的算术或比较运算符行为。 - **事件...
- **属性与索引器**:属性(`property`)简化了对类中字段的访问;索引器(`indexer`)提供基于索引的访问方式。 - **事件与委托**:事件(`event`)用于处理对象之间的通信;委托(`delegate`)定义方法的类型。 - ...