2012-03-13 133 views
0

这是第一种方式:策略创建

Public Class MyClass 
    Private _Property As String 

    Property Property() As String 
     Get 
      Return _Property 
     End Get 
     Set(ByVal Value As String) 
      _Property = Value 
     End Set 
    End Property 

    Public Function DoSomething() As String 
     Return _Property & Now() 
    End Function 
End Class 

我也能做到这样:

Public Class MyClass 

    Public Property As String 

    Public Function DoSomething() As String 
     Return Property & Now() 
    End Function 

End Class 

哪种方式最好?

回答

2

较短的方法是首选(由我),因为它更容易阅读和理解。如果你需要做一些特别的事情,你可以随时切换到一个完全写作的属性定义。

虽然有些言论。

您应该始终在代码中使用属性getter(Property)。切勿使用内部变量(_Property)。这很重要,因为通过这种方式,所有与该内部变量的交互都通过一个您可以轻松修改的单点。也许你想格式化属性,或者在值不正确时抛出异常等。所以DoSomething函数在两种方法中都应该完全相同。

Public Function DoSomething() As String 
    Return Me.Property & Now() 
End Function 

最后,属性速记不正确。它应该是:

Public Property [Property] as String 

你没有给它起个名字。我假设你想把它命名为'财产'。我认为这是一个保留字,因此您可能会遇到问题。通过像这样声明它,编译器不会绊倒它。但是,您应该明智地避免在您的类&方法名称中使用保留字。

1

首先,我会正确地拼写MyClass

如果用自己的方式完成微软建议是什么,然后你的方式是首选。你的代码简短而甜蜜。不过,只有当你对发生的事情有强烈的理解时,我才会建议你按照自己的方式去做。当我没有必要的时候,我已经在路上跑了很多次了。

+0

对不起,我输入的很快。 – Maysam 2012-03-13 13:48:01

+0

不用担心。回答你的问题是重要的。 – 2012-03-13 13:49:17

2

的回答你的问题取决于你想才达到什么......

在第一种方式,你“隐藏”,从“用户”的信息。如果你为自己编写代码,而且你确切地知道你做了什么,那么你可以像第二种方式那样做。

但最常见的是使用公共属性的风格很差。因为当你这样做时,你失去了对公共财产的控制,因为任何人都可以改变它,而不使用getter/setter。

所以,如果你喜欢一个API写的东西,你不应该使用的公共属性,因为要严格限制访问您的属性...

例如:如果你使用第一种方式,但删除Set方法并在构造函数中自己初始化属性。那么没有办法从外面改变房产,因为它是私人的。但是你仍然可以从外部世界“询问”你的课程,Get(),你将会收到你所定义的内容。

信息隐藏被使用,以防止其他“哑巴”程序员滥用类和获取错误的结果...

+0

如果你想隐藏外部类的属性,你不会只使用'私有属性'吗?你的回答对我来说没有多大意义,对不起。代码隐藏很重要,但这不是问题。最重要的是让所有东西都通过属性,只有属性本身而不是内部变量。如果你想稍后改变setter或getter的内部行为,你可以手动写出它。但是一定要确保你通过制定者和获得者。 – SpoBo 2012-03-13 14:07:27

+0

@SpoBo问题更复杂......当然你也是对的。您可以使用第二种方式并将LOC保存。但是当你在一家大公司工作,而其他人在以后使用/维护/改进你的代码时,他们总会犯错。而你的第一句话:我强烈反对!你应该反过来看看:如果你有很强的理由(而且对我来说只有很少的理由),你应该公开一个财产。默认应该是私人的! – Sauer 2012-03-13 14:26:20

+0

我同意只有在您认为在课堂以外需要该资产时,该资源才应该公开。只对班级内部代码重要的东西应该是私人的。但是,只需将'Private Property [PropertyName]'写为String'即可。如果您需要公开提供私有属性,请使用不同名称创建一个只读返回私有属性的新ReadOnly属性。无论如何,这个讨论是完全偏离轨道的:p问题简单得多。 – SpoBo 2012-03-13 14:56:58