可能重复:
属性与方法
在方法中,您也可以在属性中键入一些代码.例如,我有一个属性名称.当类名更改时,我想从数据库中获取一些数据并更改对象的状态.我可以添加此代码来设置我的属性的一部分.其他解决方案是将set part更改为private并添加名为SetName的方法,并在此方法中添加我的代码.
那么区别是什么呢?什么时候把一些代码放到getter/setter并且何时创建自己的方法来改变我的属性和我的类的其他部分是不合适的?
一些代码来说明我的问题:
With Test.AnObject
    .Something = 1337
    .AnotherThing = "Hello"
    ''// why can't I do this to pass the object itself:
    Test2.Subroutine(.)
    ''// ... and is there an equivalent, other than repeating the object in With?
End With
在.NET中,如果一个类包含一个类对象的成员,那么该成员是应该作为属性公开还是使用方法公开?
可能重复:
属性与方法
关于何时使用属性与方法相比,是否有任何规则或一般最佳实践?从技术上讲,任何无参数方法都可以在属性中进行,任何属性都可以作为方法,但有时何时决定何时使用其中一个可以模糊.
在决定两者之间时,我希望得到一些你们要记住的规则.
可能重复:
属性与方法
在许多情况下,很明显某些东西应该是属性还是方法,但是有些东西可能被认为是含糊不清的.
明显属性:
明显的方法:
暧昧:
我想我会倾向于模棱两可的方法,但有没有人知道有助于决定这一点的规则或惯例?例如,所有属性应该是O(1)?属性是否应该无法更改其他数据(ColorSaturation可能会更改R,G,B值)?如果有计算或汇总,它不应该是财产吗?
仅仅从学术的角度来看,(而不是因为我认为这是一个好主意)是否有理由不对属性发疯,只是在不参与争论的情况下制作所有类别的审讯,以及可以改变的一切具有单个参数且无法失败的类,属性?
我正在编写一个类来封装一些业务规则,每个规则都由一个布尔值表示.该类将用于处理InfoPath表单,因此规则通过使用XPath操作在全局XML数据结构中查找值来获取当前程序状态.将这些规则暴露给调用者 - 属性或公共方法的最佳(最惯用)方法是什么?
使用属性调用
Rules rules = new Rules();
if ( rules.ProjectRequiresApproval ) {
    // get approval
} else {
    // skip approval
}
使用方法调用
Rules rules = new Rules();
if ( rules.ProjectRequiresApproval() ) {
    // get approval
} else {
    // skip approval
}
规则类将规则公开为属性
public class Rules() {
    private int _amount;
    private int threshold = 100;
    public Rules()  {
        _amount = someExpensiveXpathOperation;
    }
    // rule property
    public bool ProjectRequiresApproval {
        get { return _amount > threshold }
    } …我刚刚开始学习c#,而且我对getter和setter的简写有点挣扎.
据我了解,下面的两种方法是等效的.它是否正确?
//Method 1
public string name { get; set; }
//Method 2
private string name
public string getName() { return name;}
public string setName(string newName) { this.name = newName; }
其次,如果我们想要在getter/setter和实例变量上使用不同的访问修饰符,这是如何工作的.以下代码错误,告诉我访问者必须比属性更具限制性,并且我无法为烦恼访问器指定修饰符.有人可以澄清一下吗?
private int maxTime { public get; public set; }
编辑:澄清一下,我没有具体的目标,只有理解.我不明白这个简写符号是做什么的.在其他语言中,我有私有实例变量,并使用公共getter和setter来管理这些实例变量.如果我自己写出方法,它就允许这样做,但不能用这个简写符号.为什么是这样?
编辑2:检查我的理解的最后一个问题.下面的两个代码片段都使用属性来管理maxTime变量.两者之间的唯一区别是风格.它是否正确?
private int maxTime;
public int MaxTime{ get; set; }
VS
private int maxTime;
public int MaxTime
{
    get { return maxTime; }
    set { maxTime= value; }
}
可能重复:
属性与方法
我有一些矢量几何类,并且有很多功能我不知道是否实现为(只读)属性或方法.例子包括:
Vector.Length                   or              Vector.Length()
Vector.Perpendicular            or              Vector.Perpendicular()
Matrix.Determinant              or              Matrix.Determinant()
Matrix.Inverse                  or              Matrix.Inverse()
我应该将这些作为方法或属性实现吗?他们都没有改变他们适用的对象,所以在这方面,他们似乎适合作为属性.另一方面,它们涉及计算(虽然是小的 - 这是2D几何),这显然对属性不利.
在这种情况下,我应该使用哪些规则?
当我遇到这个声明时,我正在阅读Rob Miles的一本名为C#Yellow Book的书:
程序员喜欢新的闪亮玩具.他们非常热衷于使用语言功能来炫耀.属性可能有点像这样.在考虑属性与get和set方法时,我更喜欢老式的get和set方法,因为你知道你在哪里使用它们.另一方面,如果以正确的方式使用,我可以看到属性可以使生活更轻松.
我不太确定他的意思是什么.你们有什么建议?MS建议什么?
有没有我应该在.NET中执行以下操作而不是使用具有读/写功能的属性的情况?
private S as string
public function GetS() as string
     return S
end function
public sub SetS(byval NewS as string)
    S = NewS
end function
属性是否只是提供了一种更有效的方法来做同样的事情?
在高性能应用程序中,属性是否会比上述访问器功能慢?
c# ×7
properties ×7
.net ×3
methods ×3
class ×2
oop ×2
vb.net ×2
coding-style ×1
conventions ×1
methodology ×1
semantics ×1