在 Unity、Blazor、WinForms、WPF 等平台下属性的实际用法
                           
天天向上
发布: 2025-04-19 10:16:21

原创
975 人浏览过

本章节整理了 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 ←→ 属性
WPFMVVM 属性绑定 / 通知 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

更多详细内容请关注其他相关文章!

发表回复 0

Your email address will not be published. Required fields are marked *