首页 > 解决方案 > 如何在类外修改可变类?

问题描述

我了解封装的需要和声明为的类中的变量

 public String VariableName{get; set; } or 

 private string _variableName;
 public string VariableName {
    get {
       return _variableName;
    } 
    set {
       _variableName=value;
    }
}

我理解这样做的原因之一是避免线程在竞争条件下访问变量并更改类属性。但这可能不仅仅是这种封装的原因。其他类如何更改此类的变量?我认为要直接访问我们需要使用 static 关键字的属性。否则,只能通过创建此类的对象来更改属性。另外,这实际上是如何封装的?我们可以使用对象的 VariableName 属性访问 _variableName 字段。所以,基本上我们仍然可以访问它。有人可以帮我理解这个概念吗?

TIA。

标签: oopc#-6.0object-oriented-analysis

解决方案


你的问题有很多误解。我建议您查看C# 文档

首先,使用属性与线程无关。属性是关于控制对类持有的数据的访问的类作者。其中一些控制可能与线程有关。

接口只能声明属性,不能声明字段。因此,接口实现必须使用属性。

static关键字用于声明属于类型本身而不是特定对象的成员。

至于你的例子:

public String VariableName{get; set; }

这无非是编译器的“语法糖”。编译器将该代码转换为:

[CompilerGenerated]
private string <VariableName>k__BackingField;

public string VariableName
{
    [CompilerGenerated]
    get
    {
        return <VariableName>k__BackingField;
    }
    [CompilerGenerated]
    set
    {
        <VariableName>k__BackingField = value;
    }
}

为避免名称冲突,属性的支持字段的名称在 IL 中有效,但在 C# 中无效。


推荐阅读