“属性”详解
核心概念:属性可以存"任何东西"
属性的类型可以是:
| 类型 | 例子 | 说明 |
|---|---|---|
| 值类型 | int、double、bool、enum | 存一个具体的数值 |
| 引用类型 | string | 存一段文本 |
| 自定义类 | Product | 存一个对象(引用) |
| 集合 | List<Product> | 存一堆对象 |
| 接口 | IDisposable | 存实现了该接口的任何对象 |
结论:属性不只能存基本数据,它能存任何类型的对象。
public Product Product { get; set; }拆解
public class Order { // 属性的类型是 Product(一个自定义类) // 属性的名字也叫 Product public Product Product { get; set; } }例子理解
public class Person { public string Name { get; set; } // 人的名字(字符串) public int Age { get; set; } // 人的年龄(数字) public Dog Pet { get; set; } // 人的宠物(是一个 Dog 对象) }| 属性 | 存的什么 | 类型 |
|---|---|---|
Name | "张三" | string(文本) |
Age | 25 | int(数字) |
Pet | 🐕 一只真正的狗对象 | Dog(自定义类) |
Pet属性存的不是"文本"也不是"数字",而是"一只狗"——一个完整的对象,这个对象有自己的属性(名字、品种、年龄)和方法(叫、跑)。
实际代码演示
// 商品类 public class Product { public int Id { get; set; } public string Name { get; set; } public decimal Price { get; set; } } // 订单类 public class Order { public int OrderId { get; set; } public DateTime CreateTime { get; set; } // 这个属性指向一个 Product 对象 public Product Product { get; set; } } // 使用 class Program { static void Main() { // 1. 先创建一个商品对象 Product phone = new Product { Id = 1, Name = "手机", Price = 3999 }; // 2. 创建一个订单 Order order = new Order { OrderId = 1001, CreateTime = DateTime.Now, Product = phone // 把商品对象赋给订单的 Product 属性 }; // 3. 通过订单访问商品信息 Console.WriteLine(order.Product.Name); // 手机 Console.WriteLine(order.Product.Price); // 3999 } }order 对象 ├── OrderId: 1001 ├── CreateTime: ... └── Product ──────→ phone 对象 ├── Id: 1 ├── Name: "手机" └── Price: 3999order.Product存的不是整个手机的全部数据副本,而是指向那个手机对象的"引用"(像是一个遥控器)。
为什么需要这种写法?
// ❌ 不用对象属性——把商品的所有字段复制到订单里 public class Order { public int OrderId { get; set; } public int ProductId { get; set; } // 复制商品ID public string ProductName { get; set; } // 复制商品名 public decimal ProductPrice { get; set; } // 复制商品价格 // ... 商品有100个字段,要复制100次? } // ✅ 用对象属性——直接关联一个商品对象 public class Order { public int OrderId { get; set; } public Product Product { get; set; } // 一个引用搞定! }