C#properties:为什么这样做?

C#properties:为什么这样做?,c#,properties,set,readonly,C#,Properties,Set,Readonly,也许我在最新版本的C#中遗漏了一些东西,但对我来说,这段代码应该还不起作用,它确实起作用了 public class FileManip { public FileManip(string path) { appPath = path; } private string appPath { get; } //............... } 只读属性可以从您正在执行的构造函数中设置。只读属性可以从您正在执行的构造函数中

也许我在最新版本的C#中遗漏了一些东西,但对我来说,这段代码应该还不起作用,它确实起作用了

public class FileManip {
    public FileManip(string path) {
        appPath = path;
    }

    private string appPath {
        get;
    }
    //...............
}

只读属性可以从您正在执行的构造函数中设置。

只读属性可以从您正在执行的构造函数中设置。

当属性具有带有实现的
get
时,您具有不允许写入的属性:

public class FileManip {
    public FileManip(string path) {
        AppPath = path;   // <<===== ERROR
    }
    private string AppPath {
        get { return @"c:\temp\"; }
    }
}
公共类FileManip{
公共FileManip(字符串路径){

AppPath=path;//当属性具有带有实现的
get
时,您拥有一个不允许写入的属性:

public class FileManip {
    public FileManip(string path) {
        AppPath = path;   // <<===== ERROR
    }
    private string AppPath {
        get { return @"c:\temp\"; }
    }
}
公共类FileManip{
公共FileManip(字符串路径){

AppPath=path;//您可能希望将其更改为

private const string appPath = "something";

您可能希望将其更改为

private const string appPath = "something";

有什么可以说的,是的,它确实可以工作,正如你自己所看到的。是什么让它工作的,C#的定义是这样的,这是有效的。他们可以用自己的语言来做这件事。一个拥有get的人可以使它成为
只读的
。这些属性可以在构造函数中设置。“也许在最新版本的C#中我遗漏了一些东西”——C#6中实现了“仅Getter”属性,根据:“现在可以在不使用setter的情况下声明自动属性“。有什么可以说的,是的,它确实有效,正如你自己所看到的。是什么使它有效,C#是以这样一种方式定义的。他们可以用自己的语言来实现这一点。一个拥有get的人会使它成为
只读的
。这些属性可以在构造函数中设置。“也许在最新版本的C#中我遗漏了一些东西”——C#6中实现了“仅Getter”属性,根据:“现在可以在不使用setter的情况下声明自动属性“。你可以从构造函数中多次设置它们,而不是一次。你可以从构造函数中多次设置它们,而不是一次。啊,我明白了。我知道,标记为只读的正则变量可以在构造函数中设置(使其不同于常量)但是我以前从未在属性中看到过这一点。thxahh我明白了。我知道标记为只读的正则变量可以在构造函数中设置(使其不同于常量)但是我以前从未在属性中看到过这种情况。ThxId只是因为不再需要使用PropertyId,只是因为不再需要使用属性