2015-11-20 65 views
2

请问我产生任何问题,如果我让我所有的类属性结构成员,如下面的代码呢?C#类的属性定义

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#开发速度很重要的实时项目。感谢您的任何反馈!

+7

什么是应该的优势,即使是在VB额外的层? – Plutonix

+1

''我会创建任何问题吗?' - 呃,它使代码更复杂,没有明显的原因。复杂的事情比简单的事情更可能失败。 – David

+0

当你使用简写时,你所建议的基本上是发生了什么。你只是看不到实例变量(因为你真的不需要)。我所知道的唯一理由就是你要么在get/set期间做某种计算,要么你需要做某种范围验证。 – Duston

回答

10

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

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; } 
} 
+0

为了理智,我这样做了。我有几百个属性的课程。一个月后,我不得不添加更多。使用结构让我在逻辑上将它们分组。我用一个属性表做了一个代码生成器。我会为结构添加属性,然后生成包括实用程序方法的所有代码,例如清除组中的所有值,或从表中导入字段值等。另外,某些属性组将被复制到其他类中。执行速度并不重要(日期批处理结束)。编码方便了。但这可能归结为个性。我倾向于打出很多标签。 – OldRoboCoder

0

老实说,我不认为你的方法会产生任何问题。速度和内存绝对不是问题,如果你有一个额外的结构与你的属性 - 除非你在一些只有64K Ram的设备上运行你的程序,但我假设你没有。
因此,对于你的问题 - 如果你知道你在做什么,并访问正确的结构变量,那么你的代码将会很好。

然而,正如上面提到的,你的做法是远远的最佳实践。
C#是使用任何自动属性或属性与基础后备领域拥有广泛的一种语言,它被认为是最好的做法,也最好的维护,如果你遵循这种结构。

属性也有很多的整齐的优势 - 更多相关信息的链接下:
MSDN Property Tutorial

因此,简言之,你的方法不一定,它根本就不是最好练习。因为我们鼓励最佳实践,我鼓励你不要使用你的方法。

+0

我在VB中做这个的原因是: – OldRoboCoder