它说财产不应该只是“设置”(代码分析规则CA1044),它也应该是“获取”。如果我需要将值设置为来自其他类的变量,我该怎么办?
意志不断改变所以我无法通过构造函数传递它。
我应该为此创建一个函数,如下所示?
class A
{
public void SetValue()
{
b = new B();
b.SetTest(10);
}
}
class B
{
int test;
public void SetTest(int value)
{
test = value;
}
}
还有其他选择吗?
答案 0 :(得分:3)
我同意这对于只写属性(从类视点的客户端)来说有点混乱,所以我试着避免它们,而是创建一种某种类型的set方法。
Microsoft推荐的方式似乎也是将其重写为方法(或者如果合适的话,使其读写):http://msdn.microsoft.com/en-us/library/ms182165.aspx
答案 1 :(得分:2)
如果您需要访问自己类中的变量,可以使用公共setter和私有getter。
class B {
public int test { private get; set; }
}
答案 2 :(得分:0)
谁说财产不应该只使用set accessor?我没有看到它的设计缺陷。如果有的话,我会很高兴学到新东西:)
答案 3 :(得分:0)
public int Test { get; set; }
答案 4 :(得分:0)
你的例子没有多大意义,因为你没有坚持B
的实例,但你可以这样做:
class A
{
private B b;
public A()
{
this.b = new B();
}
public void SetValue()
{
this.b.Test = 10;
}
}
class B
{
int test;
public int Test
{
get{ return this.test; }
set{ this.test = value; }
}
}
另一种方法是使Test
属性成为autoproperty(框架生成支持字段),如下所示:
class B
{
public int Test{get; set;}
}