Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 创建类的策略_.net_Performance - Fatal编程技术网

.net 创建类的策略

.net 创建类的策略,.net,performance,.net,Performance,这是第一种方式: 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

这是第一种方式:

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

首选哪种方式?

首先,我会正确拼写
MyClass


如果你的方式实现了微软的建议,那么你的方式是首选。你的代码又短又甜。然而,我建议只有当你对正在发生的事情有很强的理解时,才按照你的方式去做。我已经在这条路上跑了太多次,在我不需要的时候重新发明轮子。

首先,我要正确拼写
MyClass


如果你的方式实现了微软的建议,那么你的方式是首选。你的代码又短又甜。然而,我建议只有当你对正在发生的事情有很强的理解时,才按照你的方式去做。我已经在这条路上跑了太多次,在我不需要的时候重新发明轮子。

你的问题的答案取决于你想要实现什么

在第一种方式中,您向“用户”隐藏信息。如果您正在为自己编写代码,并且您确切地知道自己在做什么,那么您可以像第二种方法那样来做

但最常见的是,使用公共属性是不好的风格。因为当您这样做时,您将失去对公共属性的控制,因为任何人都可以更改它,而无需使用getter/setter

因此,如果您正在编写类似API的东西,则永远不要使用公共属性,因为您希望严格限制对属性的访问

例如:如果使用第一种方法,但删除Set方法并在构造函数中自己初始化属性。那么,就没有办法从外部改变财产,因为它是私有的。但是您仍然可以从外部世界“询问”您的类,Get(),您将得到您定义的确切内容


信息隐藏被用来防止其他“愚蠢”的程序员误用你的类并得到错误的结果…

你的问题的答案取决于你想要实现什么

在第一种方式中,您向“用户”隐藏信息。如果您正在为自己编写代码,并且您确切地知道自己在做什么,那么您可以像第二种方法那样来做

但最常见的是,使用公共属性是不好的风格。因为当您这样做时,您将失去对公共属性的控制,因为任何人都可以更改它,而无需使用getter/setter

因此,如果您正在编写类似API的东西,则永远不要使用公共属性,因为您希望严格限制对属性的访问

例如:如果使用第一种方法,但删除Set方法并在构造函数中自己初始化属性。那么,就没有办法从外部改变财产,因为它是私有的。但是您仍然可以从外部世界“询问”您的类,Get(),您将得到您定义的确切内容


使用信息隐藏,以防止其他“愚蠢”的程序员误用您的类并获得错误的结果…

我更喜欢使用较短的方法,因为它更易于阅读和理解。如果需要执行某些特殊操作,您可以始终切换到完全编写的属性定义

不过也有一些评论

您应该始终在代码中使用属性getter(属性)。切勿使用内部变量(_属性)。这一点很重要,因为通过这种方式,所有与该内部变量的交互都会经过一个点,您可以轻松地修改该点。可能您希望格式化属性,或者在值不正确时引发异常,等等。因此,两种方法中的DoSomething函数应该完全相同

Public Function DoSomething() As String
  Return Me.Property & Now()
End Function  
最后,属性速记是不正确的。应该是:

Public Property [Property] as String

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

我更喜欢使用较短的方式,因为它更易于阅读和理解。如果需要执行某些特殊操作,您可以始终切换到完全编写的属性定义

不过也有一些评论

您应该始终在代码中使用属性getter(属性)。切勿使用内部变量(_属性)。这一点很重要,因为通过这种方式,所有与该内部变量的交互都会经过一个点,您可以轻松地修改该点。可能您希望格式化属性,或者在值不正确时引发异常,等等。因此,两种方法中的DoSomething函数应该完全相同

Public Function DoSomething() As String
  Return Me.Property & Now()
End Function  
最后,属性速记是不正确的。应该是:

Public Property [Property] as String

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

不用担心。回答你的问题才是最重要的。不用担心。回答你的问题是什么很重要。如果你想对外部类隐藏属性,你会使用“私有属性”吗?对不起,你的回答对我来说没有多大意义。代码隐藏很重要,但不是这里的问题。最重要的是让一切都通过属性,只访问属性本身,而不访问内部变量。如果您想稍后更改setter或getter的内部行为,您可以手动将其写出。但一定要通过二传手和传手。@SpoBo问题更复杂。。。当然,你也是对的。您可以使用第二种方式保存LOC。但是当你在一家更大的公司工作,而其他人后来又在使用/维护/改进你的代码时,他们总是会犯错误。还有你的第一句话:我强烈地分解!你应该换个角度看:如果你有充分的理由,你应该把一处房产公之于众