Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/254.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何编写看起来像只读属性的内容?_C# - Fatal编程技术网

C# 如何编写看起来像只读属性的内容?

C# 如何编写看起来像只读属性的内容?,c#,C#,在System.Exception基类中有以下属性(如pro c#5.0中所述): 公共虚拟字符串消息{get;} 这看起来像一个只读属性或没有主体的常规属性。不管怎样,我都不能自己复制上面的代码 编辑: 如果这描述了一个常规属性,编译器会抱怨get没有正文。如果您定义这样的类: public class YourClass { public string MyProperty { get; private set; } } public class Exception { p

在System.Exception基类中有以下属性(如pro c#5.0中所述):

公共虚拟字符串消息{get;}

这看起来像一个只读属性或没有主体的常规属性。不管怎样,我都不能自己复制上面的代码

编辑:


如果这描述了一个常规属性,编译器会抱怨get没有正文。

如果您定义这样的类:

public class YourClass
{
    public string MyProperty { get; private set; }
}
public class Exception
{
    public Exception(string message)
    {
        this.Message = message;
    }

    public string Message { get; private set; }
}
它将显示为“只到外部”<代码>异常可能如下所示:

public class YourClass
{
    public string MyProperty { get; private set; }
}
public class Exception
{
    public Exception(string message)
    {
        this.Message = message;
    }

    public string Message { get; private set; }
}

消息
只有一个getter的原因是它不是自动属性。这是消息的内部实现方式(取自.NET引用源):


内部执行选项将值写入
\u message
,最终用户没有对该成员的读写权限,但它提供了一个包装器,以便最终用户可以对其进行只读访问。

本书没有显示
message
属性的实现,而是显示其元数据。试图编译这样一行代码是行不通的(正如您所发现的)

要了解我的意思,请在VS中弹出以下代码:

Exception e; string m = e.Message;

将光标放在
消息
属性上,点击F12:您将被带到书中显示的行。

您如何查看代码?如果您使用的是DotPeek或Reflector之类的工具,那么您并不总能获得可编译的源代码。请提供更多详细信息。你提到的代码非常有用work@RohitKandhal不,不会:不允许指定只读自动属性。这本书很可能是在向您展示属性的元数据,而不是它的实现。这不是Message属性的外观。使用反编译器或引用源来查看真实源。这是方法签名-虚拟getter,而不是源实现权限(可能返回在构造函数中创建的消息)?它说这是在哪里实现的?