Tailwind CSSTailwind CSS
Home
  • Tailwind CSS 书籍目录
  • Vue 3 开发实战指南
  • React 和 Next.js 学习
  • TypeScript
  • React开发框架书籍大纲
  • Shadcn学习大纲
  • Swift 编程语言:从入门到进阶
  • SwiftUI 学习指南
  • 函数式编程大纲
  • Swift 异步编程语言
  • Swift 协议化编程
  • SwiftUI MVVM 开发模式
  • SwiftUI 图表开发书籍
  • SwiftData
  • ArkTS编程语言:从入门到精通
  • 仓颉编程语言:从入门到精通
  • 鸿蒙手机客户端开发实战
  • WPF书籍
  • C#开发书籍
learn
  • Java编程语言
  • Kotlin 编程入门与实战
  • /python/outline.html
  • AI Agent
  • MCP (Model Context Protocol) 应用指南
  • 深度学习
  • 深度学习
  • 强化学习: 理论与实践
  • 扩散模型书籍
  • Agentic AI for Everyone
langchain
Home
  • Tailwind CSS 书籍目录
  • Vue 3 开发实战指南
  • React 和 Next.js 学习
  • TypeScript
  • React开发框架书籍大纲
  • Shadcn学习大纲
  • Swift 编程语言:从入门到进阶
  • SwiftUI 学习指南
  • 函数式编程大纲
  • Swift 异步编程语言
  • Swift 协议化编程
  • SwiftUI MVVM 开发模式
  • SwiftUI 图表开发书籍
  • SwiftData
  • ArkTS编程语言:从入门到精通
  • 仓颉编程语言:从入门到精通
  • 鸿蒙手机客户端开发实战
  • WPF书籍
  • C#开发书籍
learn
  • Java编程语言
  • Kotlin 编程入门与实战
  • /python/outline.html
  • AI Agent
  • MCP (Model Context Protocol) 应用指南
  • 深度学习
  • 深度学习
  • 强化学习: 理论与实践
  • 扩散模型书籍
  • Agentic AI for Everyone
langchain
  • 3.4 属性与索引器

3.4 属性与索引器

3.4.1 属性的定义与使用

属性的基本概念

属性(Property)是C#中封装字段访问的一种机制,它通过get和set访问器控制对私有字段的读写操作。属性提供了数据绑定的支持,并允许在访问字段时添加逻辑验证。

属性的语法

private string _name; // 私有字段

public string Name    // 公共属性
{
    get { return _name; }
    set { _name = value; }
}

自动实现属性(Auto-Property)

C# 3.0引入的简化语法:

public string Name { get; set; } // 编译器自动生成私有字段

属性访问器控制

  • 只读属性:仅包含get访问器
  • 只写属性:仅包含set访问器(较少使用)
  • 访问修饰符:可为get或set单独设置访问级别

3.4.2 索引器的定义与使用

索引器的基本概念

索引器(Indexer)允许对象像数组一样通过索引访问,常用于封装集合类。语法类似于属性,但使用this关键字和方括号。

索引器的语法

class StringCollection
{
    private string[] _items = new string[10];
    
    public string this[int index]
    {
        get => _items[index];
        set => _items[index] = value;
    }
}

// 使用示例
var collection = new StringCollection();
collection[0] = "Hello";  // 调用set访问器
Console.WriteLine(collection[0]);  // 调用get访问器

多参数索引器

索引器可以接受多个参数:

public int this[int x, int y]
{
    get { return _grid[x, y]; }
}

3.4.3 属性与索引器的比较

特性属性索引器
声明方式使用属性名使用this关键字
访问语法对象.属性名对象[索引参数]
参数无参数可以有一个或多个参数
典型用途封装字段访问使对象支持类似数组的访问

3.4.4 高级特性

表达式体属性

C# 6.0引入的简化语法:

public string FullName => $"{FirstName} {LastName}";

初始化属性

C# 6.0允许属性初始化:

public List<int> Numbers { get; set; } = new List<int>();

索引器重载

可以定义多个索引器(参数类型不同):

public string this[int index] { ... }
public string this[string name] { ... }

3.4.5 最佳实践

  1. 属性选择原则:

    • 优先使用自动属性
    • 需要验证逻辑时使用完整属性
    • 避免在属性getter中抛出异常
  2. 索引器使用场景:

    • 集合类
    • 多维数据访问
    • 字典式访问
  3. 性能考虑:

    • 简单属性会被JIT内联优化
    • 复杂逻辑考虑使用方法替代属性
  4. 线程安全:

    • 多线程环境下考虑属性访问的同步机制
    • 可以使用Lazy<T>延迟初始化
Last Updated:: 5/3/25, 11:01 PM