标签: setter

哪个更合适:吸气剂和制定者或功能?

如果替代函数名称使API更明显,放弃getter和setter的"getMyValue()"和"setMyValue()"模式是否合适?

例如,假设我在C++中有这个类:


public class SomeClass {
private:
    bool mIsVisible;

public:
    void draw();
    void erase();
}
Run Code Online (Sandbox Code Playgroud)

我可以添加函数来获取/设置"mIsVisible",如下所示:


bool getVisible() { return mIsVisible; };

void setVisible(bool visible) { if (!mIsVisible && visible) { draw(); } else if (mIsVisible && !visible) { erase(); }

mIsVisible = visible;
Run Code Online (Sandbox Code Playgroud)

}

Run Code Online (Sandbox Code Playgroud)

但是,同样可以使用以下方法:


bool isVisible() { return mIsVisible; };

void show() { 
    if (!mIsVisible) {
        mIsVisible = true;
        draw();
    }
}

void hide() {
    if (mIsVisible) {
        mIsVisible = false;
        erase();
    }
}
Run Code Online (Sandbox Code Playgroud)

简而言之,有一个"setVisible(bool)"方法,还是一对"show()"和"hide()"方法更好?有会议,还是纯粹主观的?

c++ getter setter coding-style

7
推荐指数
2
解决办法
2454
查看次数

绑定Setter.Value代码

在XAML中我可以这样写:

<Setter Property="PropertyName" Value="{Binding ...}" />
Run Code Online (Sandbox Code Playgroud)

我将如何在代码中执行此操作?我之前在代码中构造了绑定,但我似乎无法ValuePropertySetter类上找到任何要传递给它的静态对象BindingOperations.SetBinding().

c# wpf setter binding code-behind

7
推荐指数
1
解决办法
8374
查看次数

是否可以使用setter将属性返回到其默认值?

想知道是否可能,例如,如果我从TextBox中删除边框,并且我想在鼠标悬停时将其默认边框恢复.

    <Style TargetType="TextBox">
        <Setter Property="BorderBrush" Value="{x:Null}"/>
        <Style.Triggers>
            <Trigger Property="IsMouseOver" Value="True">
                <Setter Property="BorderBrush" Value="?????"/>
            </Trigger>
        </Style.Triggers>
    </Style>
Run Code Online (Sandbox Code Playgroud)

我以为我可以使用它,但最后隐藏边界似乎是一个坏主意,但问题仍然存在.(我知道在这种情况下,如果鼠标不在TextBox上,我可以将Trigger反转为仅删除边框)

wpf setter styles wpf-controls

7
推荐指数
1
解决办法
1241
查看次数

在JSP/Java中,如何通过s.th替换getter/setter.更通用?

我厌倦了在豆子里一直加入大量的吸气剂/杀菌剂.有没有一种简单的方法来使用注释来摆脱这种愚蠢的工作?或任何其他方式?第二个例子是我希望运行的简短版本,因为不需要封装我的成员(尽管在另一个上下文中它可能是必要的).在我的现实世界中,我必须访问大约15个类,每个类中有大约10个数据成员,这将产生300个无用的setter/getter.

示例TestPerson.java(有效):

public class TestPerson {
  public String firstName;
  public String lastName;
  public TestPerson() {
    firstName = "Hugo";
  }
  public String getFirstName() {
    return firstName;
  }
  public void setFirstName(String firstName) {
    this.firstName = firstName;
  }
  public String getLastName() {
    return lastName;
  }
  public void setLastName(String lastName) {
    this.lastName = lastName;
  }
}
Run Code Online (Sandbox Code Playgroud)

示例TestPerson.java(不起作用):

public class TestPerson {
  public String firstName;
  public String lastName;
  public TestPerson() {
    firstName = "Hugo";
  }
}
Run Code Online (Sandbox Code Playgroud)

示例test.jsp

<jsp:useBean id="testperson" class="test.TestPerson" scope="request" />
<html>
<head><title>Test</title></head>
<body> …
Run Code Online (Sandbox Code Playgroud)

java getter setter

7
推荐指数
2
解决办法
1845
查看次数

为python类使用__setattr__和描述符

我正在编写一个使用__setattr____getattr__提供自定义属性访问的python类.

但是,某些属性无法以通用方式处理,因此我希望使用描述符.

出现的问题是,对于描述符,__get__将调用描述符以支持实例__getattr__,但是当分配给属性时,__setattr__将调用以支持描述符__set__.

一个例子:

class MyDesc(object):

    def __init__(self):
        self.val = None

    def __get__(self, instance, owner):
        print "MyDesc.__get__"
        return self.val

    def __set__(self, instance, value):
        print "MyDesc.__set__"
        self.val = value

class MyObj(object):

    foo = MyDesc()

    def __init__(self, bar):
        object.__setattr__(self, 'names', dict(
            bar=bar,
        ))
        object.__setattr__(self, 'new_names', dict())

    def __setattr__(self, name, value):
        print "MyObj.__setattr__ for %s" % name
        self.new_names[name] = value

    def __getattr__(self, name):
        print "MyObj.__getattr__ for %s" % name

        if name …
Run Code Online (Sandbox Code Playgroud)

python setter attributes descriptor

7
推荐指数
2
解决办法
1650
查看次数

何时在objective-c中使用setter属性'copy'?

我知道通常你使用NSStrings的副本,这样你的属性就像你分配它时一样保持相同的价值,即使试图在其他地方重新设置它.

但我很难完全理解这个概念.这不适用于任何类型的对象(不仅仅是NSStrings)吗?

所以我的问题是,"我应该将什么样的属性设置为'复制',为什么?"

setter objective-c ios ios5

7
推荐指数
2
解决办法
3673
查看次数

你能把一个方法作为属性变量中默认的setter动作的一部分吗?

如果你有多个属性在setter中实现相同的方法,有没有办法让它成为默认setter的一部分?

如果我有多个属性Filter()在设置时调用它,是否有办法将其推入"基本setter",这样我就不必Filter()在每个setter中都有调用?

private string _MyVal1;
public string MyVal1 {
    get {
        return _MyVal1;
    }
    set {
        _MyVal1 = value;
        Filter();
        OnPropertyChanged("MyVal1");
    }
}

private string _MyVal2;
public string MyVal2 {
    get {
        return _MyVal2;
    }
    set {
        _MyVal2 = value;
        Filter();
        OnPropertyChanged("MyVal2");
    }
}

private string _MyValN;
public string MyValN {
    get {
        return _MyValN;
    }
    set {
        _MyValN = value;
        Filter();
        OnPropertyChanged("MyValN");
    }
}
Run Code Online (Sandbox Code Playgroud)

所以它变成了这样:

private string _MyValN;
public string MyValN {
    get {
        return …
Run Code Online (Sandbox Code Playgroud)

c# setter properties

7
推荐指数
1
解决办法
7405
查看次数

构造函数中的setter方法

得到一个我遇到的问题

public class Student{
     private String studentNumber;
     private String studentName;
     private double studentResult;

     public Student (String aNumber, String aName){
         setStudentNumber(aNumber);
         setStudentName(aName);
         setStudentResult(0);
     }
     // The standard getter and setter method are define here.
}
Run Code Online (Sandbox Code Playgroud)

在构造函数中使用setter方法的目的是什么?并且使用setStudentResult(0),我们需要另一个实例变量吗?

java methods setter constructor

7
推荐指数
2
解决办法
2560
查看次数

如何使用C#中的setter覆盖getter-only属性?

更新: 此问题已经过修改,以使其更加清晰.下面的答案似乎反映出这种方法效果很好.希望这个问题可以帮助那些需要添加get或者添加set现有财产的人.


今天遇到一个问题,我需要get用a get和覆盖基类的-only属性set.目前的共识似乎是这是不可能的,但我认为我找到了一种方法.

一般的想法是创建一个new属性而不是直接override使用旧属性,然后我们通过调用新方法创建一个overrideget方法的桥接方法.

情况

这是一些无法修改的任意预先存在的类型结构的代码.

public abstract class A
{
    public abstract int X { get; }
}
public class B : A
{
    public override int X { get { return 0; } }
}
Run Code Online (Sandbox Code Playgroud)

问题

我们想编写这段代码,但不会编译.

public class C : B    // won't compile: X can't have a 'set' method
{
    private int _x;
    public override int X …
Run Code Online (Sandbox Code Playgroud)

c# getter setter overriding readonly

7
推荐指数
1
解决办法
5089
查看次数

swift setter导致exc_bad_access

我下面有一个简单的课程

import Foundation

public class UsefulClass: NSObject{
    var test:NSNumber{
        get{return self.test}
        set{
            println(newValue)
            self.test = newValue
        }
    }
    override init() {
        super.init()
        self.test = 5;
    }
}
Run Code Online (Sandbox Code Playgroud)

我在这里初始化它

import UIKit

class ViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        var testClass = UsefulClass()
    }
}
Run Code Online (Sandbox Code Playgroud)

但是由于EXC_BAD_ACCESS代码= 2,它会导致xcode打印出200 5s然后崩溃.为什么会发生这种情况?

setter exc-bad-access swift

7
推荐指数
2
解决办法
7236
查看次数