在 Unity、Blazor、WinForms、WPF 等平台下属性的实际用法
本章节整理了 C# 属性(Property) 在 Unity、Blazor、WinForms、WPF 各平台中的实际使用场景与范例,涵盖响应式编程、数据绑定、序列化、UI 控件驱动等角度。
每个平台我都附上了最常见用法与核心原理,确保可以从实战角度理解。
一、Unity 中的属性用法(Property in Unity)
✅ 应用场景:Inspector 绑定 + 封装私有字段
Unity 在 Inspector 面板默认只能显示字段而非属性。但我们可以用属性封装字段,以增强控制力。
🎯 示例:封装字段 + 控制只读访问
using UnityEngine;
public class Player : MonoBehaviour
{
[SerializeField]
private int health = 100;
public int Health
{
get => health;
private set => health = Mathf.Clamp(value, 0, 100);
}
public void TakeDamage(int amount)
{
Health -= amount;
}
}
💡 小贴士:
- 属性不会显示在 Inspector 面板中,除非你使用第三方工具(如 Odin Inspector)。
- Unity 的序列化系统 不支持属性的序列化,只能用字段(如
[SerializeField] private)控制可见性与封装。
二、Blazor 中的属性用法(Property in Blazor)
✅ 应用场景:组件参数传递 + 数据绑定(@bind)
🎯 示例:组件通信与数据绑定
<!-- ParentComponent.razor -->
<ChildComponent Message="Hello Blazor!" />
<!-- ChildComponent.razor -->
<h3>@Message</h3>
@code {
[Parameter]
public string Message { get; set; }
}
🎯 双向绑定使用 @bind
<InputText @bind-Value="Name" />
<p>输入的名字是:@Name</p>
@code {
public string Name { get; set; }
}
💡 小贴士:
- Blazor 会根据
@bind-Value自动使用属性的 Getter/Setter。 - 使用
[Parameter]属性可以让组件从父组件接收值,[Parameter]后必须要有公有属性。
三、WinForms 中的属性用法(Property in Windows Forms)
✅ 应用场景:数据绑定 + 控件状态反射 + UI 属性访问
🎯 示例:属性驱动控件状态
public partial class MainForm : Form
{
private string _username;
public string Username
{
get => _username;
set
{
_username = value;
lblUsername.Text = _username;
}
}
public MainForm()
{
InitializeComponent();
}
private void btnSubmit_Click(object sender, EventArgs e)
{
Username = txtName.Text;
}
}
🎯 示例:控件数据绑定
txtName.DataBindings.Add("Text", userModel, "Name");
💡 小贴士:
- WinForms 的
DataBindings系统依赖属性来绑定控件与数据源。 - 实体需实现
INotifyPropertyChanged才能实现实时更新。
四、WPF 中的属性用法(Property in WPF)
✅ 应用场景:数据绑定(Data Binding)+ INotifyPropertyChanged + MVVM 模式核心
🎯 示例:属性绑定 + 通知 UI 更新
public class UserViewModel : INotifyPropertyChanged
{
private string _name;
public string Name
{
get => _name;
set
{
if (_name != value)
{
_name = value;
OnPropertyChanged(nameof(Name));
}
}
}
public event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged(string propName)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propName));
}
}
🎯 XAML 绑定
<TextBox Text="{Binding Name, UpdateSourceTrigger=PropertyChanged}" />
💡 小贴士:
- 属性是 WPF MVVM 架构的核心,数据绑定依赖
INotifyPropertyChanged。 - 所有 ViewModel 属性都应通过属性封装字段并通知变更。
五、各平台属性机制总结对比表
| 平台 | 属性用途 | 特性或接口 | UI 绑定支持 | 示例关键词 |
|---|---|---|---|---|
| Unity | 封装字段 / 控制访问 | [SerializeField] | ❌ 不支持绑定 | Health 控制逻辑封装 |
| Blazor | 参数传递 / 数据绑定 | [Parameter], @bind-Value | ✅ 支持双向绑定 | InputText 双向绑定 |
| WinForms | 控件数据绑定 / 状态同步 | DataBindings | ✅ 支持绑定 | TextBox.Text ←→ 属性 |
| WPF | MVVM 属性绑定 / 通知 UI 变化 | INotifyPropertyChanged | ✅ 强绑定支持 | {Binding} + ViewModel |
📚 权威参考链接
- Unity 属性系统:https://docs.unity3d.com/ScriptReference/SerializeField.html
- Blazor 数据绑定:https://learn.microsoft.com/aspnet/core/blazor/components/data-binding
- WinForms 数据绑定:https://learn.microsoft.com/en-us/dotnet/desktop/winforms/data
- WPF 数据绑定与属性:https://learn.microsoft.com/en-us/dotnet/desktop/wpf/data/data-binding-overview
更多详细内容请关注其他相关文章!