标签: accessor

在C#中组合多播委托 - 我应该使用运算符还是Action.Combine?

阅读文档我可以看到+运算符可以用于组合/组合相同类型的委托.

以同样的方式,我可以看到我可以使用-运算符从组合委托中删除a .

我还注意到该Action类型具有静态CombineRemove方法,可用于连接两个委托的调用列表,并分别从另一个委托的调用列表中删除委托的调用列表的最后一次出现.

        Action a = () => Debug.WriteLine("Invoke a");
        Action b = () => Debug.WriteLine("Invoke b");
        a += b;
        a.Invoke(); 

        //Invoke a
        //Invoke b

        Action c = () => Debug.WriteLine("Invoke c");
        Action d = () => Debug.WriteLine("Invoke d");
        Action e = Action.Combine(c, d);
        e.Invoke();

        //Invoke c
        //Invoke d

        a -= b;
        a.Invoke();

        //Invoke a

        e = Action.Remove(e, d);
        e.Invoke(); 

        //Invoke c
Run Code Online (Sandbox Code Playgroud)

它们在调用列表中如何组合/删除时似乎产生相同的结果.

我已经看到在SO和其他代码中的各种示例中使用的两种方式.有什么理由我应该使用这种或那种方式吗?坑坑洼洼吗?例如-我可以看到线警告a -= b;指出Delegate …

c# delegates accessor

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

对象[[["key"]]]如何在javascript中评估对象["key"]?

为什么javascript会将以下内容评估为true,因为该对象foo具有有效属性bar

foo[[[["bar"]]]] === foo["bar"]
Run Code Online (Sandbox Code Playgroud)

基于运算符优先级,我认为foo[[[["bar"]]]]是尝试以数组[[["bar"]]]作为键访问属性,但为什么它仍然"平坦化"到相同的foo["bar"]

我的同事们说javascript解析器有简化括号,忽略了额外的括号.我不认为这是真的,因为保存[[["foo"]]]到变量test会得到相同的结果:

> test = [[["bar"]]]
 [Array[1]]
> foo["bar"] = 5
 5
> foo[test]
 5
Run Code Online (Sandbox Code Playgroud)

语言或解析器的哪个方面导致了这种行为?谢谢!

javascript arrays accessor

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

Haskell仅为读访问的导出记录

我有一个使用记录语法的Haskell类型.

data Foo a = Foo { getDims :: (Int, Int), getData :: [a] }
Run Code Online (Sandbox Code Playgroud)

我不想导出Foo值构造函数,因此用户无法构造无效对象.但是,我想导出getDims,以便用户可以获取数据结构的维度.如果我这样做

module Data.ModuleName(Foo(getDims)) where
Run Code Online (Sandbox Code Playgroud)

然后用户可以使用getDims获取维度,但问题是他们还可以使用记录更新语法来更新字段.

getDims foo -- This is allowed (as intended)
foo { getDims = (999, 999) } -- But this is also allowed (not intended)
Run Code Online (Sandbox Code Playgroud)

我想阻止后者,因为它会将数据置于无效状态.我意识到我可以根本不使用记录.

data Foo a = Foo { getDims_ :: (Int, Int), getData :: [a] }

getDims :: Foo a -> (Int, Int)
getDims = getDims_
Run Code Online (Sandbox Code Playgroud)

但这似乎是解决问题的一种相当迂回的方式.有没有办法继续使用记录语法,只导出记录名称以进行读取访问,而不是写入访问?

haskell encapsulation record accessor

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

PHP的_get&_set或每个变量的唯一get和set函数?

PHP内置了_get和_set函数.为每个变量编写自己的get和set函数是否更好,或者使用内置函数和if if if if?每种方法的优缺点是什么?

php encapsulation get accessor set

6
推荐指数
1
解决办法
3624
查看次数

对象的任何优势.GetObject(i)over objects [i]?

我正在重构前一个开发人员的一些C#数据访问代码,并对他使用的模式感到好奇.

该代码最初暴露了各种ActiveRecord样式业务对象的集合(数组) - 实质上是包装数据库字段的对象.我正在将数组更改为通用列表,但我很好奇的代码方面是前一个开发人员为他正在包装的每种类型的对象都有Get方法,因此:

public Thing GetThing(int i) {
    return things[i];
}
Run Code Online (Sandbox Code Playgroud)

有几种这样的方法,我不能为我的生活想到使用该机制而不是直接简单地引用事物[i]的任何可能的优势.为了论证,我们假设事物是公共财产,而不是公共领域(在这种情况下,它实际上是一个自动实现的属性,因此假设实际上是正确的).

我错过了一些明显的东西吗 甚至是一些深奥的东西?

更新 我应该澄清这些集合目前是从for循环中访问的:

for (int i = 0; i < thingsCount; i== ) {
    dosomthing( GetThing(i) );
    dosomethingelse( GetThing(i) );
}
Run Code Online (Sandbox Code Playgroud)

我正在重构:

for (int i = 0; i < thingsCount; i== ) {
    Thing thing = things[i];
    dosomthing( thing );
    dosomethingelse( thing );
}
Run Code Online (Sandbox Code Playgroud)

甚至可以使用things.foreach().

.net c# collections properties accessor

6
推荐指数
1
解决办法
207
查看次数

是否有覆盖属性的模式?

Objective-C运行保持声明的属性作为元数据与一个类对象的列表.元数据包括属性名称,类型和属性.运行时库还提供了一些函数来检索这些信息.这意味着声明的属性不仅仅是一对存取方法(getter/setter).我的第一个问题是:为什么我们(或运行时)需要元数据?

众所周知,在子类中不能覆盖声明的属性(readwrite与readonly除外).但我有一个场景,保证需要:

@interface MyClass : MySuperClass <NSCopying, NSMutableCopying>

@property (nonatomic, copy, readonly) NSString *string;

- (id)initWithString:(NSString *)aString;

@end


@interface MyMutableClass : MyClass

@property (nonatomic, strong, readwrite) NSMutableString *string;

- (id)initWithString:(NSString *)aString;

@end
Run Code Online (Sandbox Code Playgroud)

当然,编译器不会让上面的代码通过.我的解决方案是使用一对存取方法替换声明的属性(使用readonly case,只是getter):

@interface MyClass : MySuperClass <NSCopying, NSMutableCopying> {
    NSString *_string;
}

- (id)initWithString:(NSString *)aString;

- (NSString *)string;

@end


@implementation MyClass

- (id)initWithString:(NSString *)aString {
    self = [super init...];
    if (self) {
        _string = [aString copy];
    }
    return self;
}

- (NSString *)string {
    return …
Run Code Online (Sandbox Code Playgroud)

objective-c accessor mutability declared-property

6
推荐指数
1
解决办法
2110
查看次数

FindBugs EI_EXPOSE_REP错误只涉及日期吗?

Findbugs在我的代码上报告了很多EI_EXPOSE_REP和EI_EXPOSE_REP2错误,每次我写这样的getter和setter:

  public Date getDate() {
    return date;
  }
  public void setDate(final Date date) {
    this.date = date;
  }
Run Code Online (Sandbox Code Playgroud)

我理解报告的含义,我不应该将我的objet的内部引用暴露给外部世界,以便它们不会被恶意/错误的代码修改.修复将是:

  public Date getDate() {
    return date == null ? null : date.clone();
  }
  public void setDate(Date date) {
    this.date = date == null ? null : date.clone();
  }
Run Code Online (Sandbox Code Playgroud)

我的问题不在这里.我很惊讶这份报告关注的是ALWAYS Date.为什么不是所有其他可变对象?我认为这份报告也适用于所有可变对象,不是吗?

我是否应该将这种"良好做法"扩展到我处理可变对象的所有访问者?

给我你的建议,谢谢

java findbugs accessor getter-setter

6
推荐指数
1
解决办法
8222
查看次数

C#'get'访问者无法识别

http://xbox.create.msdn.com/en-US/education/tutorial/2dgame/creating_the_player,它被指示使用此代码:

public int Width()
    {
        get { return PlayerTexture.Width; }
    }

    public int Height()
    {
        get { return PlayerTexture.Height; }
    }
Run Code Online (Sandbox Code Playgroud)

但是,"get"访问器似乎根本不被识别.我收到以下错误:

  • 当前上下文中不存在名称"get".

  • 只有赋值,调用,递增,递减和新对象表达式才能用作语句.

我错过了'使用系统.(某事)'线路吗?我在调查我的问题时已经成功地使用过无数次,但我找不到任何碰到同样事情的人.

我正在使用XNA Game Studio 4.0和Microsoft Visual C#2010 Express.这是我的Player.cs类的完整代码:

using System;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Graphics;

namespace Shooter
{
class Player
{
    private Texture2D PlayerTexture;
    public Vector2 Position;
    public bool Active;
    public int Health;

    public int Width()
    {
        get { return PlayerTexture.Width; }
    }

    public int Height()
    {
        get { return PlayerTexture.Height; }
    }

    public void …
Run Code Online (Sandbox Code Playgroud)

c# xna get accessor

6
推荐指数
1
解决办法
3629
查看次数

Laravel/Eloquent模型属性可见性

以前我使用的ORM已经将数据库列直接映射到类属性,这允许您具有特定的属性可见性,就像您通常会限制对某些属性(例如密码)的访问一样.

有了Eloquent,我似乎无法复制这个,因为数据库列被映射到不包含可见性的内部属性数组.

我的愿望是将访问用户密码的范围仅限于对象即私有.

设置具有可见性的类属性不起作用,因为此属性超出了Eloquent模型属性的范围,因此该属性未映射到列.

Eloquent $ hidden和$ guarded属性不起作用,因为它们处理大量输出(toArray,toJSON)和质量赋值而不是直接赋值.

我试图使用accessors/mutators(getters/setters)来实现这一目标,结果不一致.

指定访问器上的可见性不起作用,因为调用的访问器方法(例如getPasswordAttribute)是从Eloquent\Model-> getAttribute方法调用的,因此public/protected将始终有效,并且private将始终失败,无论它访问的属性在何处从.

然而,有效的是停止Eloquent访问器完全返回属性,因此对$ user-> password或$ user-> getAttribute('password')的任何请求都会失败,然后有一个单独的方法,其中定义了可见性以便返回直接来自Eloquent属性数组的属性仅在允许的范围内

/**
 * Return password string only for private scope
 * @return string
 */

private function getPassword ()
{
    return $this->attributes['password'];
}

/**
 * Don't return password with accessor
 * @param string $password Password
 * @return void
 * @throws Exception
 */

public function getPasswordAttribute ($password)
{
    throw new Exception ('Password access denied');
}
Run Code Online (Sandbox Code Playgroud)

对于任何想要setter方法可见性的人来说,这种方法也适用于mutators(setter).

这看起来是否正确或是否有更好的"Laravel-Approved"处理方式?:)

php visibility accessor laravel eloquent

6
推荐指数
1
解决办法
2468
查看次数

如何为2D数组编写访问器(私有成员)

我有一个名为mat [3] [3]的类的私有成员,我希望能够在我的课程之外访问这个3x3数组(只读它,而不是更改).是否可以编写返回指向我的数组的指针的访问器方法?我怎样才能做到这一点?请提供代码示例.

这是我的班级:

class myClass {
private:
    int mat[3][3];
public:
    return_value get_mat(void);
};
Run Code Online (Sandbox Code Playgroud)

我知道我可以用类似的东西

int get_mat(int i, int j);
Run Code Online (Sandbox Code Playgroud)

逐个访问数组中的每个int,但为数组的每个成员调用访问器是不是很低效?

c++ accessor multidimensional-array

6
推荐指数
1
解决办法
884
查看次数