【问题标题】:C# class property definitionsC# 类属性定义
【发布时间】:2015-11-20 18:12:35
【问题描述】:

如果我像下面的代码那样使我的所有类属性结构成员,我会产生任何问题吗?

    private struct Properties
    {
        public int p1;
        public int p2;
    }
    private Properties P;
    public int p1 { get { return P.p1; } set { P.p1 = value; } }
    public int p2 { get { return P.p2; } set { P.p2 = value; } }

多年来,我在 VB 中做过类似的事情,但速度并不重要。现在我刚刚开始在速度很重要的实时项目中使用 C#。感谢您的任何反馈!

【问题讨论】:

  • 即使在 VB 中,额外层的假定优势是什么?
  • "Will I create any problems" - 嗯,它使代码更加复杂,没有明显的原因。复杂的事情比简单的事情更容易失败。
  • 您的建议本质上是使用速记时发生的情况。你只是看不到实例变量(因为你真的不需要。)我知道这样做的唯一原因是你必须在获取/设置期间进行某种计算,或者你需要进行某种范围验证。
  • Inner-platform 想不到这个词更早
  • 可能设法击败编译器对属性访问的正常内联:Field vs Property. Optimisation of performance,尽管编译器人员已经包含了许多巧妙的优化。你的测试结果如何?

标签: c#


【解决方案1】:

是的。问题将是不必要的代码。你可以像这样缩短你的代码,它仍然会发挥同样的作用:

public int p1 { get;set; }
public int p2 { get;set; }

如果你想在 getter 或 setter 上设置断点,你可以像这样使用支持私有字段:

private int _p1;
public int P1
{
    get { return _p1; }
    set { _p1 = value; }
}

private int _p2;
public int P2
{
    get { return _p2; }
    set { _p2 = value; }
}

【讨论】:

  • 我这样做是为了理智。我有数百个属性的类。一个月后,我必须添加更多内容。使用结构让我可以对它们进行逻辑分组。我制作了一个带有属性表的代码生成器。我将属性添加到结构然后生成所有代码,包括实用方法,例如清除组中的所有值,或从表中导入字段值等。此外,某些属性组将被复制到其他类。执行速度并不重要(一天结束的批处理)。编码容易。但这可能都归结为个性。我经常给标签装箱。
【解决方案2】:

老实说,我认为您的方法不会造成任何问题。如果您的属性有一个小的额外结构,速度和内存绝对不是问题 - 除非您在某些只有 64K Ram 左右的设备上运行程序,但我假设您没有。
因此,对于您的问题 - 如果您知道自己在做什么并访问正确的结构变量,那么您的代码就可以了。

但是,如上所述,您的方法远非最佳实践。
C# 是一种广泛使用自动属性或具有底层支持字段的属性的语言,如果您遵循此结构,它被认为是最佳实践和最佳维护。

物业也有很多巧妙的优势 - 此链接下的更多信息:
MSDN Property Tutorial

因此,总而言之,您的方法不一定错误缓慢,它根本不是最佳实践。由于我们鼓励最佳实践,我建议您不要使用您的方法。

【讨论】:

  • 我在VB中这样做的原因是:
猜你喜欢
  • 2011-11-28
  • 2016-05-03
  • 1970-01-01
  • 1970-01-01
  • 2017-05-31
  • 1970-01-01
  • 2012-03-29
  • 1970-01-01
  • 2012-02-15
相关资源
最近更新 更多