标签: getter-setter

吸气剂,制定者和属性最佳实践.Java与C#

我现在正在上C#课程,我正在努力寻找最好的做事方式.我来自Java背景,因此我只熟悉Java最佳实践; 我是C#新手!

在Java中,如果我有私有财产,我会这样做;

private String name;

public void setName(String name) {
   this.name = name;
}

public String getName() {
   return this.name;
}
Run Code Online (Sandbox Code Playgroud)

在C#中,我看到有很多方法可以做到这一点.

我可以像Java一样做:

private string name;

public void setName(string name) {
   this.name = name;
}

public string getName() {
   return this.name;
}
Run Code Online (Sandbox Code Playgroud)

或者我可以这样做:

private string name;

public string Name {
   get { return name; }
   set { name = value; }
}
Run Code Online (Sandbox Code Playgroud)

要么:

public string Name { get; set; }
Run Code Online (Sandbox Code Playgroud)

我应该使用哪一个,每种方法涉及哪些警告或细微之处?在创建类时,我遵循我从Java中了解的一般最佳实践(特别是阅读Effective Java).因此,例如,我赞成不变性(仅在必要时提供setter).我很想知道这些实践如何适应C#中提供setter和getter的各种方法; 基本上,我如何将Java世界的最佳实践转换为C#?

编辑

我发布这篇文章是对Jon Skeet答案的评论,但后来很久了:

那么一个非平凡的财产(也许,可能有重要的处理和验证)?我是否仍然可以通过公共属性公开它,但是逻辑封装在get和 …

c# java properties getter-setter

90
推荐指数
6
解决办法
8万
查看次数

你使用get/set模式(在Python中)吗?

使用get/set似乎是Java中的常见做法(出于各种原因),但我几乎看不到使用它的Python代码.

为什么在Python中使用或避免使用get/set方法?

python getter-setter

75
推荐指数
6
解决办法
9万
查看次数

将getters和setter内联制作是一种好习惯吗?

public:
     inline int GetValue() const {
          return m_nValue;
     }
     inline void SetValue(int nNewValue) {
          this -> m_nValue = nNewValue;
     }
Run Code Online (Sandbox Code Playgroud)

Learn C++上,他们表示会跑得更快.所以,我认为在getter和setter上使用它会很棒.但也许,它有一些缺点吗?

c++ performance inline getter-setter

70
推荐指数
5
解决办法
3万
查看次数

让我的getter方法改变存储值是不好的做法吗?

在我的班级中更改我的getter方法(如版本2)是不好的做法.

版本1:

 public String getMyValue(){
     return this.myValue
 }
Run Code Online (Sandbox Code Playgroud)

版本2:

 public String getMyValue(){

    if(this.myValue == null || this.myValue.isEmpty()){
       this.myValue = "N/A";
    }

    return this.myValue;
 }
Run Code Online (Sandbox Code Playgroud)

lazy-loading class lazy-evaluation getter-setter

68
推荐指数
6
解决办法
5002
查看次数

C++ getters/setters编码风格

我已经在C#中编程了一段时间,现在我想要提高我的C++技能.

上课:

class Foo
{
    const std::string& name_;
    ...
};
Run Code Online (Sandbox Code Playgroud)

什么是最好的方法(我只想允许对name_字段的读访问):

  • 使用getter方法: inline const std::string& name() const { return name_; }
  • 让这个领域公开,因为它是一个常数

谢谢.

c++ coding-style getter-setter

65
推荐指数
5
解决办法
17万
查看次数

在NetBeans中生成getter和setter

我需要知道如何让NetBeans使用快捷方式生成getter和setter.

java netbeans keyboard-shortcuts getter-setter

63
推荐指数
1
解决办法
11万
查看次数

私人制定者打字稿?

有没有办法在TypeScript中为属性设置私有的setter?

class Test
{
    private _prop: string;
    public get prop() : string
    {
        return this._prop;
    }

    private set prop(val: string)
    {
        //can put breakpoints here
        this._prop = val;
    }
}
Run Code Online (Sandbox Code Playgroud)

编译器抱怨getter和setter的可见性不匹配.我知道我可以设置支持字段,但是当设置值时我不能设置断点.

我虽然使用接口来隐藏setter,但是接口只能定义一个属性,而不是它是否在setter上有getter.

我在这里错过了什么吗?似乎没有任何理由不允许私有的setter,结果JS不会强制执行可见性,并且似乎比当前的替代品更好.

我错过了什么吗?如果不是,没有私人制定者的充分理由?

setter accessor getter-setter typescript

61
推荐指数
3
解决办法
2万
查看次数

为什么我不能在Swift中使用let in protocol?

我对Swift中有关var的使用和关键字{get set}的协议有疑问.

来自Apple文档:

如果协议要求属性可获取和可设置,则不能通过常量存储属性或只读计算属性来满足该属性要求.如果协议只要求属性可以获取,那么任何类型的属性都可以满足要求,如果这对您自己的代码有用,则该属性也可以设置.

属性要求始终声明为变量属性,前缀为var关键字.Gettable和settable属性通过在类型声明后写入{get set}来指示,并且通过编写{get}来指示gettable属性.

我无法理解为什么我不能使用let.只有get的协议中的var不只是一个let

像这样的东西:

protocol someProtocol 
{
   var someProperty: String { get }
}
Run Code Online (Sandbox Code Playgroud)

它不会只是:

protocol someProtocol 
{
   let someProperty: String
}
Run Code Online (Sandbox Code Playgroud)

我错过了什么?

protocols getter-setter ios swift swift-protocols

59
推荐指数
2
解决办法
2万
查看次数

Kotlin的吸气剂和二传手

例如,在Java中,我可以自己编写getter(由IDE生成)或者在lombok中使用@Getter之类的注释 - 这非常简单.

然而,Kotlin 默认拥有getter和setter.但我无法理解如何使用它们.

我想说,就像Java一样:

private val isEmpty: String
        get() = this.toString() //making this thing public rises an error: Getter visibility must be the same as property visibility.
Run Code Online (Sandbox Code Playgroud)

那么吸气剂如何工作?

getter-setter kotlin

59
推荐指数
6
解决办法
5万
查看次数

当有吸气剂时,Hibernate是否总是需要一个setter?

我们有一些带有@Column和的注释的Hibernate getter方法@Basic.

如果我们没有相应的setter,我们会得到一个例外.为什么是这样?

在我们的例子中,我们导出从getter返回的值(以存储在DB中),并且setter没有功能目的.所以我们只有一个空方法来解决错误情况.

java hibernate getter-setter

58
推荐指数
3
解决办法
4万
查看次数