标签: accessor

吸气剂和二传手设计不佳吗?看到矛盾的建议

我目前正在开发一个简单的Java游戏,有几种不同的模式.我扩展了一个主要的Game类,将主要逻辑放在其他类中.尽管如此,主要的游戏类仍然非常沉重.

在快速浏览一下我的代码后,其中大部分是Getters and Setters(60%),而其余部分则是游戏逻辑真正需要的.

一些谷歌搜索声称Getters和Setters是邪恶的,而其他人声称他们是良好的OO练习和伟大的程序所必需的.

所以我该怎么做?应该是哪个?我应该为我的私人变量更改我的Getters和Setter,还是应该坚持使用它们?

java oop getter setter accessor

224
推荐指数
10
解决办法
7万
查看次数

有没有办法在Java中模拟C++的"朋友"概念?

我希望能够在一个包中编写一个Java类,它可以访问另一个包中的类的非公共方法,而不必使它成为另一个类的子类.这可能吗?

c++ java accessor friend

182
推荐指数
5
解决办法
7万
查看次数

什么是'获得'和'设置'?

我正在学习Swift,我正在读The Swift Programming LanguageApple,我没有Objective C背景(只有PHP,JS和其他但没有Obj C)

在页24-25我看到这个代码:

//...Class definition stuff...

var perimeter: Double {
    get {
        return 3.0 * sideLength
    }
    set {
        sideLength = newValue / 3.0
    }
}

//...Class continues...
Run Code Online (Sandbox Code Playgroud)

这部分未在书中指定,我无法得到它们的用途.

谁能解释一下这个获取设置是什么?

accessor swift

91
推荐指数
5
解决办法
12万
查看次数

直接访问实例变量与使用访问器方法

谁能解释通过self.attribute和通过访问实例属性之间的区别@attribute

ruby accessor instance-variables

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

是否可以在接口定义中使用getter/setter?

目前,TypeScript不允许在接口中使用get/set方法(访问器).例如:

interface I {
      get name():string;
}

class C implements I {
      get name():string {
          return null;
      } 
}
Run Code Online (Sandbox Code Playgroud)

此外,TypeScript不允许在类方法中使用Array Function Expression:例如:

class C {
    private _name:string;

    get name():string => this._name;
}
Run Code Online (Sandbox Code Playgroud)

有没有其他方法可以在接口定义上使用getter和setter?

get interface accessor set typescript

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

C++中访问器方法(getter和setter)的约定

关于C++中的访问器方法的几个问题已经被问到,但没有一个能够满足我对这个问题的好奇心.

我试图尽可能避免使用访问器,因为像Stroustrup和其他着名的程序员一样,我认为一个类很多都是OO的标志.在C++中,我可以在大多数情况下为类添加更多的责任或使用friend关键字来避免它们.但在某些情况下,您确实需要访问特定的班级成员.

有几种可能性:

1.根本不要使用存取器

我们可以公开相应的成员变量.这在Java中是不行的,但对于C++社区似乎没问题.但是,我有点担心的情况是一个显式副本或一个对象的只读(const)引用应该返回,是夸大了吗?

2.使用Java样式的get/set方法

我不确定它是否来自Java,但我的意思是:

int getAmount(); // Returns the amount
void setAmount(int amount); // Sets the amount
Run Code Online (Sandbox Code Playgroud)

3.使用客观的C风格的get/set方法

这有点奇怪,但显然越来越普遍:

int amount(); // Returns the amount
void amount(int amount); // Sets the amount
Run Code Online (Sandbox Code Playgroud)

为了使其工作,您必须为您的成员变量找到不同的名称.有些人附加下划线,其他人加上"m_".我也不喜欢.

你使用哪种风格?为什么?

c++ getter setter accessor

72
推荐指数
4
解决办法
7万
查看次数

私人制定者打字稿?

有没有办法在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万
查看次数

C#自定义getter/setter没有私有变量

我最近学到了c#,所以当我学会写属性时,我被教会这样做:

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

汽车房产很棒!但是现在我正在尝试做一些更复杂的事情,所以我需要编写一对自定义访问器.

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

我知道当一个人使用autos时,编译器会将私有实例变量放在它的黑暗深处,但是我被宠坏了并且不希望那个私有变量看起来毫无意义.

有没有办法在没有私有变量的情况下使用自定义访问器?

c# coding-style accessor automatic-properties

55
推荐指数
3
解决办法
6万
查看次数

为什么我们不能分配foreach迭代变量,而我们可以使用访问器完全修改它?

我只是对此感到好奇:以下代码无法编译,因为我们无法修改foreach迭代变量:

        foreach (var item in MyObjectList)
        {
            item = Value;
        }
Run Code Online (Sandbox Code Playgroud)

但是以下将编译并运行:

        foreach (var item in MyObjectList)
        {
            item.Value = Value;
        }
Run Code Online (Sandbox Code Playgroud)

为什么第一个无效,而第二个可以在下面做同样的事情(我正在为此寻找正确的英语表达,但我不记得了.在...下面??^^)

c# iteration foreach accessor

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

以字符串形式访问对象属性并设置其值

我有一个Account班级的实例.每个帐户对象都有一个所有者,参考等.

我可以访问帐户属性的一种方法是通过访问器

account.Reference;
Run Code Online (Sandbox Code Playgroud)

但我希望能够使用动态字符串选择器访问它,如:

account["PropertyName"];
Run Code Online (Sandbox Code Playgroud)

就像在JavaScript中一样.所以我会有account["Reference"]哪些会返回值,但我也希望能够在之后分配一个新值,如:

account["Reference"] = "124ds4EE2s";
Run Code Online (Sandbox Code Playgroud)

我注意到我可以使用

DataBinder.Eval(account,"Reference") 
Run Code Online (Sandbox Code Playgroud)

获取基于字符串的属性,但使用此属性我无法为属性赋值.

我怎么能这样做?

c# string eval accessor databinder

43
推荐指数
5
解决办法
7万
查看次数