【发布时间】:2015-08-27 16:10:27
【问题描述】:
我有一个类似这样的课程:
public class Abc
{
public string City
{
get { return _getValue(); }
set { _setValue(value); }
}
public string State
{
get { return _getValue(); }
set { _setValue(value); }
}
private string _getValue()
{
// determine return value via StackTrace and reflection
}
...
}
(是的,我知道 StackTrace/reflection 很慢;别惹我兄弟)
鉴于 ALL 属性声明相同,我希望能够有一些简单/干净的方式来声明它们而无需复制相同的 get/set一遍又一遍的代码。
我在所有属性上都需要 Intellisense,这排除了使用例如。 ExpandoObject.
如果我在 C/C++ 领域,我可以使用宏,例如:
#define DEFPROP(name) \
public string name \
{ \
get { return _getValue(); } \
set { _setValue(value); } \
} \
然后:
public class Abc
{
DEFPROP(City)
DEFPROP(State)
...
}
当然这是 C#。
那么……有什么聪明的主意吗?
#### 编辑###
我想我原来的帖子不够清楚。
我的辅助函数 _getValue() 会根据调用的属性进行一些自定义的查找和处理。它不只是存储/检索简单的特定于道具的值。
如果我只需要简单的值,那么我就使用自动属性
public string { get; set; }
就这样结束了,就不会问这个问题了。
【问题讨论】:
-
T4? Visual Studio 宏...很多可能性...
-
另一件要考虑的事情是,如果你不需要做任何额外的处理..你可以简单地做
public string City { get; set; } -
怎么
public string City { get; set; }从来没有为我编译过。 -
阅读 C# 中的
automatic properties。这就是你所关心的。 -
请在
getValue和setValue中显示您正在执行哪种查找/处理。可能有解决方案,但要告诉您哪种解决方案我们需要更多地了解您在做什么(CallerMemberName可能是您想要的,但我们需要知道更多才能确定,您可能也想要 T4。如果您告诉我们你想要做什么,我们可以告诉你你需要什么)
标签: c# properties