gpt4 book ai didi

c# - 我应该公开我的类的属性吗?

转载 作者:行者123 更新时间:2023-11-28 00:47:46 24 4
gpt4 key购买 nike

在我所有的研究中,我了解到每当我想授予用户访问内部属性的权限时,我不应该授予对该属性的直接访问权限,而是通过 get/set 方法授予访问权限,例如:

class myClass
{
private int x;

public void SetX (int x)
{
this.x = x;
}

public int GetX ()
{
return this.x
}
}

因为它提供了额外的好处,允许程序员在不影响用户的情况下更轻松地完全更改引擎,更容易调试并提供更多选项来检查输入的有效性。

但是,自从我开始使用 C# 学习和编写以来,我注意到大多数语言“原生”的类都公开了它们的属性,例如,设置/获取矩形的位置或大小 (System.Drawing.Rectangle ),您可以直接访问 XYWidthHeight 属性。

  • 我看到公开属性的唯一好处是代码稍微简单一些。公开属性还有其他好处吗?

  • 什么时候应该公开属性,什么时候不应该?

最佳答案

您混淆了属性和字段。在 C# 中,属性可以像公共(public)字段一样使用,但在内部调用它们的 get/set 方法。例如,您的具有属性的类如下所示:

class MyClass
{
// Field, direct access to the internal representation
private int x;

// Property, access via methods, but syntax like field access
public int X {
get { return this.x; } // generates a get-method "int get_X()"
set { this.x = value; } // generates a set-method "void set_X(int value)"
}
}

当您现在像这样设置属性 X 时:myClass.X = 42 ,编译器将其转换为 myClass.set_X(42) ,它调用在 set block 中声明的方法。 Field-like 语法只是为了方便。

因此,您确实应该更喜欢公开 set/get 方法。只是在 C# 中,首选的方法是通过属性,它抽象出这些方法的实际调用,并允许您像字段一样使用它们。

关于c# - 我应该公开我的类的属性吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15599600/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com