Tag: setter

使用MVVM模式时,与属性更改相关的代码是应该放入setter还是事件?

寻找有关放置代码的位置的指导,这取决于对属性的更改。 例如,我有一个视图模型,用于保存应用程序设置的状态 public SettingsViewModel(ISettingsRepository settings) { _settings = settings; // … } 对于设置属性的每次更改,我们必须将此更改持久保存到存储库,并且在某些属性上,其他属性会受到影响,因此需要其他代码。 我开始只是将这个逻辑添加到setter public ProjectCollection Projects { get { return _projects; } set { if (_projects == value) return; _projects = value; RaisePropertyChanged(“Projects”); // Extra work needed when collection of projects change _settings.SaveProjects(_projects); Startable = _projects != null && _projects.Count > 0; } } […]

你经常看到滥用C#速记吸气剂/安装者?

在C#中,您可以以比其他语言更简单的方式创建getter / setter: public int FooBar { get; set; } 这将创建一个内部私有变量,您无法直接寻址,外部属性“FooBar”可以直接访问它。 我的问题是 – 你多久经常看到这种滥用? 它似乎很有可能经常违反封装最佳实践。 不要误解我的意思,我会酌情使用它,并为只读的只写类型的属性使用它的部分变体,但是你的代码库中的其他作者对它的不愉快经历是什么? 澄清:当私人变量合适时,滥用的预期定义确实会产生这样的属性。

C#可以从派生类调用基类属性

我有一个基类,其属性具有setter方法。 有没有办法从派生类调用基类中的setter,并为其添加更多function,就像使用base关键字的overriden方法一样。 对不起,我应该添加一个例子。 这是一个例子。 希望我做对了: public class A { public abstract void AProperty { set { // doing something here } } } public class B : A { public override void AProperty { set { // how to invoke the base class setter here // then add some more stuff here } } }

c类中的类的getter和setter

假设我们有一个带有属性和getter / setter的类InnerClass。 我们还有一个包含InnerClass的类OuterClass。 例如 class InnerClass { private int m_a; private int m_b; public int M_A { get { return m_a; } set { m_a = value; } } } class OuterClass { private InnerClass innerClass } 我如何为OuterClass的innerClass成员实现正确的getter和setter? 提前致谢!

C#如何为集合创建公共getter和setter以及私有方法?

我想要一个带有(例如)SortedList集合“SrtdLst”属性的类“A”,并且在这个类“A”中允许添加或减少“SrtdLst”项。 但是在类“A”的实例中,只允许获取或设置项目的内容,而不是添加新项目或减去现有项目。 在代码中: class A { public SortedList SrtdLst = new SortedList(); public A() { // This must work: SrtdLst.Add(“KeyA”, “ValueA”); // This too: SrtdLst[“KeyA”] = “ValueAAA”; } } class B { public A a = new A(); public B() { // I want the following code to fail: a.SrtdLst.Add(“KeyB”, “ValueB”); // But this must […]

c#setter中的堆栈溢出exception

这很容易解释:这很有效 using System; using ConstraintSet = System.Collections.Generic.Dictionary; namespace ConsoleApplication2 { class test { public ConstraintSet a { get; set; } public test() { a = new ConstraintSet(); } static void Main(string[] args) { test abc = new test(); Console.WriteLine(“done”); } } } 这不 using System; using ConstraintSet = System.Collections.Generic.Dictionary; namespace ConsoleApplication2 { class test { […]

限制对特定对象的公共setter访问(C#)

我正在尝试创建一个类(在C#中)作为我的应用程序的环境。 我正在尝试使类动态化,并将其作为参数发送到我的应用程序中的实体。 问题是,我希望能够更改此环境类(公共setter)的属性,但同时我希望接收环境的类无法使用这些setter。 我似乎无法找到一个很好的方式来表达我的问题(我认为这是我在谷歌或msdn上找不到这样的原因的一部分),但是很快, 我想创建一个类, setter只对我的某些对象公开,而不是对所有对象都公开 。 我目前正在尝试以下想法:避免公共设置器一起使用,并使用事件注册公开私有字段。 该类将在新的第三个对象中注册事件(作为参数发送到构造函数)。 将由环境注册的方法不仅仅是setter,因此触发这些事件将“允许访问”私有字段。 我喜欢一些想法(因为我觉得我的想法并不是那么好),或者更好的是我可以利用的一些模式。 提前致谢

如何使用C#中的setter覆盖仅限getter的属性?

更新 :此问题已经过修改,以使其更加清晰。 下面的答案似乎反映出这种方法效果很好。 希望这个问题可以帮助那些需要添加get或set to existing property的人。 今天遇到一个问题,我需要用get和set来覆盖基类的get -only属性。 目前的共识似乎是这是不可能的,但我认为我找到了一种方法。 一般的想法是创建一个new属性而不是直接override旧属性,然后我们创建一个桥接方法, override调用新的方法override旧的get方法。 情况 这是一些无法修改的任意预先存在的类型结构的代码。 public abstract class A { public abstract int X { get; } } public class B : A { public override int X { get { return 0; } } } 问题 我们想编写这段代码,但不会编译。 public class C : B // won’t compile: […]

为什么C#编译器不允许接口中的私有属性设置器?

在某些情况下,比如MVVM视图模型,我有时需要私有setter,因为视图模型公开了一个只能在内部修改的状态。 那么在接口上需要私有的setter是错误的吗? (我的意思并不是特别在所描述的场景中)如果没有,为什么C#编译器不允许它? 谢谢。

我在属性设置器中进入无限循环

public int Position { get { if (Session[“Position”] != null) { Position = Convert.ToInt32(Session[“Position”]); } else { Position = 5; } return Position; } set { Position = value; } } 我的程序调用get并进入if循环,然后无限运行到set代码中