Tag: getter

Getter属性在没有人调用的情况下运行

我在.net 3.5工作。 我有一个类“A”,它有一个堆栈和一个getter属性,当被调用时,它会删除堆栈中的第一个项目并检索下一个项目。 在初始化类之后,我看到getter在没有被调用的情况下工作,并且删除了堆栈中的顶部项,从而给了我不好的结果。 吸气剂中的断点并未显示任何人通过它。 当我将属性更改为函数时,堆栈返回ok。 如果有人可以解释为什么会这样,我会很高兴。 这是简化的类: public class A { private Stack Urls; public A(string title, string[] array) { Urls = new Stack(); foreach (string s in array) { Urls.Push(s); } } public string Url { get { return Urls.Peek(); } } public string NextUrl { get{ if (Urls.Count > 1) { Urls.Pop(); […]

C#属性数组

我有几个get属性,我希望能够像一组函数一样循环。 我希望能够做到这样的事情 public int prop1 { get; } public string prop2 { get; } public int[] prop3 { get; } public int prop4 { get; } public string prop5 { get; } public string prop6 { get; } Func myProperties = { prop1, prop2, prop3, prop4, prop5, prop6 }; ArrayList myList = new ArrayList(); foreach( […]

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

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

为什么简单的get语句如此之慢?

几年前,我在学校完成了一项任务,在那里我必须并行化Raytracer。 这是一个简单的任务,我真的很喜欢它的工作。 今天,我觉得要分析光线跟踪器,看看我是否可以让它更快地运行(没有完全检修代码)。 在分析期间,我发现了一些有趣的东西: // Sphere.Intersect public bool Intersect(Ray ray, Intersection hit) { double a = ray.Dir.x * ray.Dir.x + ray.Dir.y * ray.Dir.y + ray.Dir.z * ray.Dir.z; double b = 2 * (ray.Dir.x * (ray.Pos.x – Center.x) + ray.Dir.y * (ray.Pos.y – Center.y) + ray.Dir.z * (ray.Pos.z – Center.z)); double c = (ray.Pos.x – Center.x) […]

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 […]

TDD,DDD和封装

经过几年跟随我工作地点的“建筑师”传下来的不良做法并认为必须有更好的方法,我最近一直在阅读TDD和DDD,我认为原则和实践将是一个非常适合我们编写的软件的复杂性。 但是,我见过的许多TDD示例都在域对象上调用一个方法,然后测试对象的属性以确保正确执行行为。 另一方面,业内几位受人尊敬的人(Greg Young最着名的是关于CQRS的讨论)主张通过删除所有“getters”来完全封装每个域对象。 因此,我的问题是:如果禁止检索域状态,如何测试域对象的function? 我相信我错过了一些基本的东西所以请随时称我为白痴并启发我 – 任何指导都将不胜感激。

如何使用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: […]

内部使用属性有什么好处?

当从类外部访问成员时,封装显然是有用且必不可少的,但是当在内部引用类变量时,调用其私有成员或使用其getter更好吗? 如果你的getter只是返回变量, 那么性能是否存在差异 ?

在getter中创建对象是不是很糟糕?

让我们在getter中创建一个像这样的对象: public class Class1 { public string Id { get; set; } public string Oz { get; set; } public string Poznamka { get; set; } public Object object { get { // maybe some more code return new Object { Id = Id, poznamla = Poznamka, Oz = OZ }; } } } 或者我应该创建一个将创建并返回对象的方法?