相关疑难解决方法(0)

字段和属性之间有什么区别?

在C#中,是什么使字段与属性不同,何时应该使用字段而不是属性?

c# field properties

1032
推荐指数
17
解决办法
42万
查看次数

Allen Holub写道"你永远不应该使用get/set函数",他是否正确?

Allen Holub写了以下内容,

如果没有一些耦合,你就无法拥有一个程序.尽管如此,您可以通过盲目地遵循OO(面向对象的)规则来最大限度地减少耦合(最重要的是对象的实现应该完全隐藏在使用它的对象之外).例如,对象的实例变量(非常量的成员字段)应始终为私有.期.没有例外.永远.我是认真的.(您可以偶尔有效地使用受保护的方法,但受保护的实例变量是令人厌恶的.)

这听起来很合理,但他继续说,

你不应该出于同样的原因使用get/set函数 - 它们只是过于复杂的方式使字段公开(尽管返回完整对象而不是基本类型值的访问函数在返回对象的情况下是合理的class是设计中的关键抽象).

坦率地说,这对我来说听起来很疯狂.

我理解信息隐藏的原理,但是如果没有访问器和更改器,你根本就不能使用Java bean.我不知道如何在模型中没有访问器的情况下遵循MVC设计,因为模型不能负责渲染视图.

但是,我是一名年轻的程序员,而且我每天都在学习更多关于面向对象设计的知识.也许拥有更多经验的人可以在这个问题上权衡.

Allen Holub的文章供参考


相关问题:

language-agnostic oop getter setter immutability

50
推荐指数
7
解决办法
8816
查看次数

C#中的线程安全属性

我正在尝试在C#中创建线程安全属性,我想确保我在正确的路径上 - 这就是我所做的 -

private readonly object AvgBuyPriceLocker = new object();
private double _AvgBuyPrice;
private double AvgBuyPrice 
{
    get
    {
        lock (AvgBuyPriceLocker)
        {
            return _AvgBuyPrice;
        }
    }
    set
    {
        lock (AvgBuyPriceLocker)
        {
            _AvgBuyPrice = value;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

阅读这篇文章,似乎这不是正确的做法 -

C#线程安全与get/set

但是,这篇文章似乎暗示,

http://www.codeproject.com/KB/cs/Synchronized.aspx

有没有人有更明确的答案?

编辑:

我想为此属性执行Getter/Setter的原因是b/c我实际上希望它在设置时触发事件 - 所以代码实际上就像这样 -

public class PLTracker
{

    public PLEvents Events;

    private readonly object AvgBuyPriceLocker = new object();
    private double _AvgBuyPrice;
    private double AvgBuyPrice 
    {
        get
        {
            lock (AvgBuyPriceLocker)
            {
                return _AvgBuyPrice;
            }
        }
        set …
Run Code Online (Sandbox Code Playgroud)

.net c# multithreading properties thread-safety

34
推荐指数
4
解决办法
4万
查看次数

我需要使用{get; 组; 获取和设置时没有特殊操作的c#字段

我一直在编写这样的类:

public class ReportViewModel
    {
        public string Status;
        public string DataSource;
        public String DataStore { get; set; }
        public PageMeta PageMeta { get; set; }
        public ICollection<Question> List { get; set; } 
    } 
Run Code Online (Sandbox Code Playgroud)

请注意,大多数字段使用{get; 组; 除了我让Visual Studio为我添加的前两个.

我想知道的是我真的需要使用{get; 组; }.在我看来,VS2010不会自动添加这个,所以我需要它吗?

c#

1
推荐指数
1
解决办法
456
查看次数