Tag: 自动属性

你认为“自动接口实现”在.NET / C#中会很有用吗

考虑一下: public class interface Person : IPerson { int ID { get; protected set; } string FirstName { get; set; } string LastName { get; set; } string FullName { get { return FirstName + ” ” + LastName; } } } 还有这个: public class StubPerson : IPerson { int ID { get { return […]

在所有者类中使用属​​性vs后备字段

我喜欢C#中自动实现的属性,但最近有一只大象站在我的小隔间里,我不知道该怎么办。 如果我使用自动实现的属性(以下称“aip”),那么我不再需要内部使用的私有支持字段。 这很好,因为aip没有副作用。 但是如果稍后我需要在get或set中添加一些额外的处理呢? 现在我需要创建一个后备字段,这样我就可以扩展我的getter和setter。 这适用于使用该类的外部代码,因为它们不会注意到差异。 但是现在所有对aip的内部引用都会在访问属性时调用这些副作用。 现在,必须重构对ate aip的所有内部访问才能使用后备字段。 所以我的问题是,大多数人都做了什么? 您是使用自动实现的属性还是更喜欢始终使用后备字段? 您对具有副作用的属性有何看法?

有没有办法让readonly(不仅仅是私有)自动属性?

自动属性让我替换此代码: private MyType myProperty; public MyType MyProperty { get { return myPropertyField; } } 使用此代码: public MyType MyProperty { get; private set; } 这里和那里有一些变化 – 但有没有办法替换这个代码: private readonly MyType myProperty; public MyType MyProperty { get { return myPropertyField; } } 有类似的东西?

调用INotifyPropertyChanged的PropertyChanged事件的最佳方法是什么?

实现INotifyPropertyChanged接口时,每次在类中更新属性时,您都要负责调用PropertyChanged事件。 这通常会导致以下代码: public class MyClass: INotifyPropertyChanged private bool myfield; public bool MyField { get { return myfield; } set { if (myfield == value) return; myfield = value; OnPropertyChanged(new PropertyChangedEventArgs(“MyField”)); } } public event PropertyChangedEventHandler PropertyChanged; private void OnPropertyChanged(PropertyChangedEventArgs e) { PropertyChangedEventHandler h = PropertyChanged; if (h != null) h(this, e); } } 这是每个属性12行 。 […]

使用自动属性显式实现接口

有没有办法使用自动属性显式实现接口? 例如,考虑以下代码: namespace AutoProperties { interface IMyInterface { bool MyBoolOnlyGet { get; } } class MyClass : IMyInterface { static void Main(){} public bool MyBoolOnlyGet { get; private set; } // line 1 //bool IMyInterface.MyBoolOnlyGet { get; private set; } // line 2 } } 这段代码编译。 但是,如果将第1行替换为第2行,则无法编译。 (这不是我需要让第2行工作 – 我只是好奇。)

如何设置没有setter的属性值

我已经看到了各种问题并回答了我们可以使用这样的reflection来调用私有的setter: 是否有可能通过反思得到一个房产的私人制定者? 但是我有一些代码有一个我需要设置的属性但不能因为没有setter,我不能添加一个setter,因为这不是我的代码。 在这种情况下,有没有办法以某种方式使用reflection设置值?

无法分配struct中自动实现的属性

我有下一个代码: struct T { public T(int u) { this.U = 10; //Errors are here } public int U { get; private set; } } C#编译器在规定的行中给出了一对错误:1)在将控制权返回给调用者之前,必须完全分配自动实现的属性“TestConsoleApp.Program.TU”的备份字段。 考虑从构造函数初始化程序中调用默认构造函数。 2)在分配所有字段之前,不能使用’this’对象 我做错了什么? 帮帮我理解

如何找出属性是否是具有reflection的自动实现的属性?

所以在我的情况下,我正在使用reflection来发现类的结构。 我需要能够通过PropertyInfo对象找出属性是否是自动实现的属性。 我假设reflectionAPI没有公开这样的function,因为自动属性是C#依赖的,但有没有解决方法来获取这些信息?