C#公共变量在类中可写,但在类外只读

Mik*_*ebb 39 c# variables public

我有一个.Net C#类,我需要将变量设为public.我需要在方法中初始化此变量(不在构造函数中).但是,我不希望变量可由其他类修改.这可能吗?

And*_*are 76

不要使用字段 - 使用属性:

class Foo
{
    public string Bar { get; private set; }
}
Run Code Online (Sandbox Code Playgroud)

在这个例子Foo.Bar中,每个地方都可以读取,只能由Foo自己的成员写入.

作为旁注,此示例使用版本3中引入的C#功能,称为自动实现的属性.这是语法糖,编译器将转换为具有私有支持字段的常规属性,如下所示:

class Foo
{
    [CompilerGenerated]
    private string <Bar>k__BackingField;

    public string Bar
    {
        [CompilerGenerated]
        get
        {
            return this.<Bar>k__BackingField;
        }
        [CompilerGenerated]
        private set
        {
            this.<Bar>k__BackingField = value;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 但是如果它是引用类型而不是值类型呢?是不是另一个类读取引用然后修改它指向的对象的属性? (3认同)

3Da*_*ave 11

public class Foo
{
  public string Bar { get; private set; } 
}
Run Code Online (Sandbox Code Playgroud)


cdh*_*wie 6

你必须使用一个属性.如果您对自动getter/setter实现没问题,这将有效:

public string SomeProperty { get; private set; }
Run Code Online (Sandbox Code Playgroud)

请注意,除非在某些有限的情况下,否则不应将字段公开为公共字段.请改用属性.


Chr*_*ain 5

当然。将其设为属性,并将 setter 设为私有:

public Int32 SomeVariable { get; private set; }
Run Code Online (Sandbox Code Playgroud)

然后设置它(从类中的某个方法中):

SomeVariable = 5;
Run Code Online (Sandbox Code Playgroud)