C# 如何编写看起来像只读属性的内容?
在System.Exception基类中有以下属性(如pro c#5.0中所述):C# 如何编写看起来像只读属性的内容?,c#,C#,在System.Exception基类中有以下属性(如pro c#5.0中所述): 公共虚拟字符串消息{get;} 这看起来像一个只读属性或没有主体的常规属性。不管怎样,我都不能自己复制上面的代码 编辑: 如果这描述了一个常规属性,编译器会抱怨get没有正文。如果您定义这样的类: public class YourClass { public string MyProperty { get; private set; } } public class Exception { p
公共虚拟字符串消息{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,而不是源实现权限(可能返回在构造函数中创建的消息)?它说这是在哪里实现的?