【发布时间】:2016-07-08 13:50:53
【问题描述】:
我正在开发一个需要访问公共字符串的应用程序。 但是,我也希望限制写访问。由于我有很多字符串,我想避免每个字符串都有一个 getter 和 private setter。
见下面的代码:
public readonly string privateMem, peakVM, peakPaged, pagedSysMem, pagedMem, nonpagedSysMem;
public override void Capture()
{
using (Process p = Process.GetCurrentProcess())
{
// Throws error as privateMem can't be assigned a value
privateMem = string.Format("{0:N0} K", p.PrivateMemorySize64 / 1024);
peakVM = string.Format("{0:N0} K", p.PeakVirtualMemorySize64 / 1024);
peakPaged = string.Format("{0:N0} K", p.PeakPagedMemorySize64 / 1024);
pagedSysMem = string.Format("{0:N0} K", p.PagedSystemMemorySize64 / 1024);
pagedMem = string.Format("{0:N0} K", p.PagedMemorySize64 / 1024);
nonpagedSysMem = string.Format("{0:N0} K", p.NonpagedSystemMemorySize64 / 1024);
}
}
我知道有一些方法可以通过反射为只读字段分配值,但是我从其他几个 stackoverflow 问题中收集到,这是一个糟糕的主意。
总之:
1。 如何在没有反射的情况下为只读字符串赋值,或者在不使用详细的 getter 和 setter 的情况下是否存在更好的解决方案?
2。 有没有办法声明一个变量,为其赋值,然后将其指定为只读?
【问题讨论】:
-
getter 和 setter 在什么世界里“冗长”?好像你在一个角落里给自己编码
-
这些字符串是否在运行时设置了多次?那么您将需要
{get; private set;}或选择其他语言。 -
@KeyserSoze 字段和属性之间存在关键区别,尤其是在处理访问权限时。所以如果你打算在 C# 中做这种事情,你需要坚持使用 setter 和 getter。
-
在您提出这个问题并等待答案的时候,您可能已经完成了一个包含 getter 和 private setter 的干净课程。
-
这里的大多数人不会称其为“理论”问题,而是“想象”问题..
标签: c# reflection readonly