当嘟嘟声说,我尝试使用它但无法正常工作。我不确定它是如何工作的以及它的功能。那么这个内置属性ReadOnly有什么用呢?任何输入将不胜感激。谢谢。 最佳答案 我假设您在View中使用此属性,如EditorFor?然后使用:[Editable(false)]publicstringMyProperty{get;set;}或@Html.TextBoxFor(x=>x.MyProperty,new{readonly="readonly"})如果您想要一个类的只读公共(public)属性,请使用:publicstringMyProperty
在刚刚玩c#的时候,发现了一件奇怪的事情。代码如下:classProgram{staticvoidMain(string[]args){System.Diagnostics.Debug.Write(string.Empty);typeof(string).GetField("Empty",BindingFlags.Static|BindingFlags.Public).SetValue(null,"Tolgahan");Console.WriteLine(string.Empty);//output:Tolgahan}}为什么反射让我们改变只读字段?问题是“为什么允许通过反射设置”,而
自动属性让我替换这段代码:privateMyTypemyProperty;publicMyTypeMyProperty{get{returnmyPropertyField;}}使用此代码:publicMyTypeMyProperty{get;privateset;}在这里和那里进行了一些更改-但有没有办法替换此代码:privatereadonlyMyTypemyProperty;publicMyTypeMyProperty{get{returnmyPropertyField;}}有类似的东西吗? 最佳答案 的确,目前没有办法做到这一
我有一个Dictionary>并希望将该成员公开为只读。我看到我可以将其作为IReadOnlyDictionary>返回,但我不知道如何将它作为IReadOnlyDictionary>返回.有没有办法做到这一点?在C++中,我只是使用const,但C#没有。请注意,只需使用IReadOnlyDictionary在这种情况下没有帮助,因为我也希望这些值是只读的。看起来唯一的方法是构建另一个IReadOnlyDictionary,并向其中添加IReadOnlyList。另一个我不会感到兴奋的选择是创建实现接口(interface)IReadOnlyDictionary>的包装器,并让它保存
当我想在我的类之外将值类型设置为只读时,我会这样做:publicclassmyClassInt{privateintm_i;publicinti{get{returnm_i;}}publicmyClassInt(inti){m_i=i;}}我该怎么做才能制作List在我的类(class)之外输入只读(这样他们就不能在其中添加/删除元素)?现在我只是宣布它公开:publicclassmyClassList{publicListli;publicmyClassList(){li=newList();li.Add(1);li.Add(2);li.Add(3);}}
如果我有一个我想让继承者写入的属性,但在外部保持只读,那么实现它的首选方法是什么?我通常会选择这样的东西:privateobjectm_myProp;publicobjectMyProp{get{returnm_myProp;}}protectedvoidSetMyProp(objectvalue){m_myProp=value;}有没有更好的办法? 最佳答案 privateobjectm_myProp;publicobjectMyProp{get{returnm_myProp;}protectedset{m_myProp=valu
我试图了解哪些用例需要我将List声明为ReadOnly类型。与此相关的一个问题是:在实例化列表时分配了多少内存? 最佳答案 将字段标记为readonly的主要原因是为了让您知道常规代码不能交换列表引用。一个可能重要的关键场景是,如果您有其他代码在使用lock(theListField)对列表执行同步的类型中。.显然,如果有人交换列表实例:事情就会崩溃。请注意,在大多数具有列表/集合的类型中,预计不会更改实例,因此readonly断言这种期望。一个常见的模式是:privateList_items=newList();publicLi
我知道如何使用属性并且我知道它们隐式调用底层get和set访问器,取决于我们是写入还是读取属性。staticvoidMain(string[]args){Aa=newA();(a.b).i=100;}classA{privateB_b=newB();publicBb{get{return_b;}}}classB{publicinti;}什么代码(a.b).i=100;本质上是第一个属性的get访问器返回对对象的引用_b,一旦我们有了这个引用,我们就可以访问_b’s成员并改变他们的值(value)观。因此,在我们的示例中,具有只读属性只能防止外部代码更改引用变量的值_b,但它不会阻止外部
XmlSerializer不序列化只读字段、只读属性(仅使用getter)、私有(private)字段等。此外,如果类没有无参数构造函数,它也不会序列化对象。我的问题:据我所知,这些问题的出现是因为在反序列化时无法访问(和更改)私有(private)(和只读)字段。但是如果我不反序列化呢?我没有这个选项吗?由于同样的原因(反序列化问题),如果类没有无参数构造函数,它不会序列化对象。但是当我添加一个私有(private)的无参数构造函数时,它工作正常。怎么办?我不喜欢为每个类都添加一个无参数构造函数,并将所有字段设为公共(public)和非只读,只是为了能够对其进行序列化。现在我在私有(
我的应用程序写入一个日志文件(当前使用log4net)。我想设置一个计时器和一个后台worker来读取日志文件并将其内容打印到我的表单中的某个控件中,同时它正在被写入。我不能使用FileSystemWatcher类,因为它似乎损坏了:有时事件“更改”会触发,有时不会。而且它的“池化率”极低。所以我创建了一个Timer和一个FileSystemWatcher。在计时器的“滴答”事件中,后台工作人员执行其工作。问题是:如何只读取自worker上次检查后添加的行?publicLogForm(){InitializeComponent();logWatcherTimer.Start();}pr