Tag: properties

为什么集合初始化程序与仅使用getter的属性一起工作?

这对我来说是非常不可预测的代码结果。 我没想到这段代码会产生这样的结果。 所以,我读了Jeffrey Richter的书(clr ia c#),这个代码有一个例子。 internal class ClassRoom { private List _students = new List(); public List Students { get { return _students; } } } ClassRoom classRoom = new ClassRoom { Students = {“Mike”, “Johny”, “Vlad”, “Stas”} }; foreach (var some in classRoom.Students) { Console.WriteLine(some); } 并且,正如你们中的一些人可以建议我们可以在控制台中看到四个名字。 所以,我的问题是: 我们如何得到我们的名字,如果他们要进入学生和分别在_学生中,因为学生不存在而没有被分配。 __________EDIT_1_______________ 我读了你的答案,谢谢你们。 但是,你知道,这是一种误解……我真的无法弄明白。 当我初始化学生时 […]

查找ActiveX组件的所有属性

我试着环顾四周,但由于COM / ActiveX的世界似乎非常令人困惑,因此无法用自己的答案说服自己。 基本上我想知道的是,鉴于GUID,有没有办法知道ActiveX控件公开的所有接口,属性和方法? 我在某个地方读到你只需询问是否有特定的财产。 但是在知道房产之前我该如何询问房产? 我猜IDispatch做了类似的事情,但我无法弄清楚如何使用它。 如果这是有效的,一个小片段,最好是在C#中,可以帮助我更好地理解。 谢谢

Get方法的大小

在代码行方面是否有关于“获取”大小的指导方针或一般共识? 我在一个成员上有一个Get方法,这里很容易增长到30行代码。 我不确定在什么时候这应该被引入一个方法。 但是我只会调用类似GetMyString的东西,并将值分配给另一个成员并在构造函数中调用它。 有没有值得这样做? 这对SO来说太主观了吗?

将属性传递给C#中的方法

我需要传递某些类型的属性选择(每次一种类型),假设这是我的类型: public class Product { [PrimaryKey] public long Id { get; set; } [DisplayName(“Name”)] public string Title { get; set; } [Foreignkey(Schema = “Products”, Table = “MajorCategory”, Column = “Id”)] [DisplayName(“MCat”)] public string MajorCategory { get; set; } [Foreignkey(Schema = “Products”, Table = “Category”, Column = “Id”)] [DisplayName(“Cat”)] public string Category { get; set; } […]

受保护在VB.Net中设置接口中定义的属性

我们有一个界面,可以大致简化为: public interface IPersistable { T Id { get; } } 大多数实现接口的地方都希望拥有它,以便在该属性上有一个受保护或私有的集合,即在C#中: public class Foo : IPersistable { public int Id { get; protected set; } } 但是,我无法获得任何样本的VB.Net代码,它们遵循相同的模式,同时仍然实现了接口,因此: Public Class Foo Implements IPersistable(Of Integer) Public Property Id() As Integer Implements IPersistable(Of Integer).Id Get Throw New NotImplementedException() End Get Protected Set(ByVal value As Integer) Throw New […]

C#中`Fields`和`Properties`有什么区别?

根据这些评论编辑: 你的意思是“财产”与“战场”吗? public String S1; vs public String S2 {get; 组; – 达娜 完全是达娜,我的意思是一样的。 – 阿萨德 阿萨德:你真的需要尝试用其他术语来描述你的意思,这样我们才能更好地理解你的问题。 C#没有全局变量。 您可以在C#中定义的字段不是全局的 – 它们是类类型的成员。 – dthorpe 嗨fellas, 需要您对Field和Property之间差异的专家意见。 在我的项目中,我使用了某些全局变量,后来我改为“属性”。 我的经理问的是使用变量Properties而不是Fields什么好处。 虽然我已回复他, Property提供了一种安全/安全/间接访问Field而不是直接修改它们,如果它们被宣布为public或protected 。 但请给我一些更有说服力的论据。 感谢致敬 @Asad:你应该把你的术语说得对: Fields不是Global Variables ,C#没有全局变量(正如一些评论者提到的:你可以模拟全局变量,但你不应该这样做)。

公开受保护字段的最佳方式

我有这样一个基类: public class BaseModalCommand { protected object m_commandArgument; protected int m_commandID; protected int m_enableUIFlags; public virtual void OnIdle() { } public virtual void OnResume() { } public virtual void OnStart(int commandID, object argument) { } public virtual void OnStop() { } public virtual int EnableUIFlags { get { return this.m_enableUIFlags; } } } 虚拟方法将在派生类型中被覆盖。 如果我通过FxCop运行它,它抱怨没有声明可见的实例字段,并建议将其更改为私有并将其作为受保护的属性公开。 […]

Xml反序列化附加到列表中

我正在尝试从xml文件反序列化一些设置。 有问题的属性/底层字段是一个名为AlertColors字段。 我将基础字段初始化为白色,黄色和红色,以确保此类的新实例具有有效的颜色设置。 但是当我反序列化时, _colorArgb以六个值结束,前三个是初始化值,后三个是从xml文件中读取的值。 但属性AlertColors不会附加到该字段,但会更改其元素。 为什么我最终得到六种颜色的场? 这是代码: private List _colorArgb = new List(new int[] { Color.White.ToArgb(), Color.Yellow.ToArgb(), Color.Red.ToArgb() }); public List AlertColors { get { return _colorArgb; } set { for (int i = 0; i < Math.Min(_colorArgb.Count, value.Count); i++) { if (_colorArgb[i] != value[i]) { HasChanged = true; } } _colorArgb = value; […]

与get之间的区别; 组; 没有得到; 组;

我不明白静态属性之间的区别: public static int intId; 并得到 特性: public int intId { get { return intId; } set { intId = value; } } 这两者有什么区别? 他们的工作方式相同或不同?

私人比私人更私密? (C#)

有时您有一个支持属性的私有字段,您只需要通过属性设置器设置字段,以便在字段更改时可以执行其他处理。 问题是,从同一类的其他方法中意外绕过属性setter仍然很容易,并且没有注意到你已经这样做了。 有没有办法在C#中解决这个或一般的设计原则来避免它?