Tag: access modifiers

如何在c#中迭代内部属性

public class TestClass { public string property1 { get; set; } public string property2 { get; set; } internal string property3 { get; set; } internal string property4 { get; set; } internal string property5 { get; set; } } 我可以使用以下循环遍历属性,但它只显示公共属性。 我需要所有的属性。 foreach (PropertyInfo property in typeof(TestClass).GetProperties()) { //do something }

防止visual studio将setter方法限制为内部

好吧,我使用visual studio 2015 CE,更新2.我通常做的一个生产力黑客是我创建空模型类,如: public class PersonModel { } 然后在选择表达式中使用它们,如: db.People.Where(p => someCondition) .Select(p => new PersonModel { Id = p.Id, Name = p.Name, //set other properties }).ToList(); 然后我转到尚未存在的属性Id和Name ,…并按Control+. 要求v​​isual studio为我generate property Id 。 一切都很好,但它会创造: public int Id { get; internal set; } 如果我在asp.net webapi模型绑定中使用相同的方法,绑定将无提示失败并给我Id = 0 。 所以我的问题是:有没有选择让VS创建公共setter,即: public int Id { get; […]

C#private,static和readonly

我正在审查log4net的一些代码,我遇到了这个问题。 private static readonly ILog logger = LogManager.GetLogger(typeof(AdminClient)); 我想知道为什么你需要私有静态readonly。 从我的理解私有意味着变量不能在类外使用,除非有一个访问器方法或获取属性。 static意味着变量仅在此文件中作用域。 readonly意味着你只能从值读取而不能分配它。 所以,我在想那个写这段代码的人。 声明它是私有的,因为他们不希望它在类外使用和静态,因此不希望它在文件外使用。 但是,如果有一个get属性会静态阻止这种forms发生。 我想我可以理解readonly,只能读取和设置值。 非常感谢任何建议,

内部抽象方法。 为什么有人会拥有它们?

我今天正在进行一些代码审查,并遇到了一些开发人员编写的旧代码。 它就是这样的 public abstract class BaseControl { internal abstract void DoSomething(); } 如果在同一个程序集中有一个派生类,它就可以工作 public class DerivedControl : BaseControl { internal override void DoSomething() { } } 但是在不同的程序集中派生基类会产生编译时错误 DerivedControl does not implement inherited abstract member ‘BaseControl.DoSomething() 这让我思考。 为什么有人会将方法声明为内部抽象?

C# – 在这个例子中改进了属性的封装?

我知道错误“set访问器的可访问性修饰符必须比属性或索引器更具限制性”。 我也知道解决方案。 只是不在这个非常具体的情况下。 考虑这个例子: internal virtual bool IsFocused { get { return isFocused; } protected set { isFocused = value; } } private bool isFocused; 它显示错误。 我只是不知道为什么。 “保护”如何不比内部更容易获得? 这个问题的解决方案是什么? 我试着改为“内部保护”而没有运气。

C#中接口成员的访问修饰符

我从以下属性收到编译错误。 错误是: “修饰符’public’对此项无效” public System.Collections.Specialized.StringDictionary IWorkItemControl.Properties { get { return properties; } set { properties = value; } } 但如果我删除IWorkItemControl它编译得很好。 为什么我会收到此错误,签名中是否有/没有接口名称有什么区别?

由于其保护级别,类无法访问

我有三节课。 all都是同一命名空间的一部分。 这是三个类的基础知识。 //FBlock.cs namespace StubGenerator.PropGenerator { class FBlock : IDesignRegionInserts, IFormRegionInserts, IAPIRegionInserts, IConfigurationInserts, ISoapProxyClientInserts, ISoapProxyServiceInserts { private List pProperties; private List pMethods; public FBlock(string aFBlockName) { pProperties = new List(); pMethods = new List(); } public Property AddProperty(string aName) { Property loProp = new Property(this, aName, pProperties.Count); pProperties.Add(loProp); return loProp; } public Method AddMethod(string […]

如何在C#中保护属性并使其内部化?

这是我缩短的抽象类: abstract class Report { protected internal abstract string[] Headers { get; protected set; } } 这是一个派生类: class OnlineStatusReport : Report { static string[] headers = new string[] { “Time”, “Message” } protected internal override string[] Headers { get { return headers; } protected set { headers = value; } } internal OnlineStatusReport() { Headers […]