EPPlus API学习疑问:属性值是什么?属性为何可同时为类?
解答
什么是属性值
属性是面向对象编程中类/结构体的成员,用于封装类的状态数据,C#中的属性本质上是get(读取)和set(写入)访问器的语法糖。你调用属性的读取逻辑拿到的具体数据、或者调用写入逻辑设置的具体数据,就是属性值。
举个简单例子:如果你定义了一个Person类,其中包含int Age属性,你执行Person.Age = 20时,20就是这个属性的属性值;你读取Person.Age拿到的结果,也是该属性当前的属性值。
为什么属性可以是类类型
首先纠正一个认知:不是“属性同时是类”,而是属性的类型可以被定义为某个类。属性本身是类的成员,它的类型没有限制,可以是任意合法的C#类型,既可以是int、bool这类值类型,也可以是string、自定义类这类引用类型。当属性的类型是某个类时,该属性的属性值就是这个类的实例对象,你可以直接通过这个属性访问对应类实例的成员(属性、方法等)。
你提到的EPPlus场景就是典型的分层封装设计:
ExcelPackage是EPPlus用来表示整个Excel文件的顶层类,负责文件的加载、保存、加密等全局逻辑- 它的
Workbook属性的类型被定义为ExcelWorkbook类,这个类专门用来封装Excel文件里工作簿相关的逻辑,比如工作表管理、工作簿样式设置等 - 你访问
new ExcelPackage().Workbook拿到的属性值,就是一个ExcelWorkbook类的实例,你可以接着调用这个实例的Worksheets属性来操作工作表、调用Calculate()方法计算工作簿内的公式等。


内容的提问来源于stack exchange,提问作者fysharp
相关产品推荐
相关产品推荐

