Tag: encapsulation

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

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

速记访问者和变异者

我正在学习C#,并且正在学习将字段设为私有类,并使用Getters和Setters来公开方法而不是字段值。 get; set; get; set; 在方法1和方法2等效? 例如,一个是另一个的速记吗? class Student { // Instance fields private string name; private int mark; // Method 1 public string Name { get; set; } // Method 2 public int Mark { get { return mark; } set { mark = value; } } } 最后,如果您想在获取或设置值之前执行计算,是否会使用方法2 ? 例如,将值转换为百分比或执行validation? 例如 class Student […]

为什么我需要使用get和set?

我有一个代码段: public class MyClass { private string _myProperty; public string MyProperty { get { return _myProperty; } set { _myProperty = value; } } } 这有什么意义? 我可以将_myProperty字符串声明为public,我的任何类对象都可以直接访问它们并获取或设置值。 相反,我们使用类对象将_myProperty私有,并使用get和set来访问它们。 在任何一种情况下,类对象都能够访问它们,结果总是相同的。 那么为什么要用这种方法? 这只是因为我可以在setter中实现一些约束吗? 除此之外会对成员变量造成什么危害呢? 在这个例子中,我可以将_myProperty公开为public,而不是像OOP所暗示的那样只将它限制为私有。

C#访问派生类中的受保护成员

我写了以下代码: public class A { protected string Howdy = “Howdy!”; } public class B : A { public void CallHowdy() { A a = new A(); Console.WriteLine(a.Howdy); } } 现在,在VS2010它会导致以下编译错误: 无法通过类型“A”的限定符访问受保护的成员“Aa”; 限定符必须是’B’类型(或从中派生)。 这对我来说似乎非常不合逻辑 – 为什么我不能从类的方法访问类实例的protected字段,该方法是从它派生的? 那么, 为什么会这样呢? 找到了严格的答案 – http://blogs.msdn.com/b/ericlippert/archive/2005/11/09/491031.aspx