我经常发现我正在写一个类似于以下的类(但是有不同数量的成员,成员类型等)。是否可以自动,轻松,免费地完成这项工作?
所以我想提供参数“Foo”,“int”,“apples”,“bool”,“banana”,“Bar”和“clementine”,并为我生成其余代码。< / p>
public class Foo
{
public Foo(int apples, bool banana, Bar clementine)
{
m_Apples = apples;
m_Banana = banana;
m_Clementine = clementine;
}
public int Apples
{
get { return m_Apples; }
set { m_Apples = value; }
}
public bool Banana
{
get { return m_Banana; }
set { m_Banana = value; }
}
public Bar Clementine
{
get { return m_Clementine; }
set { m_Clementine = value; }
}
private int m_Apples;
private bool m_Banana;
private Bar m_Clementine;
}
答案 0 :(得分:5)
看看T4 Engine。它包含在VS2005之后。
答案 1 :(得分:3)
如果您升级到C#3.5,则可以缩短您需要的写作量。
例如,你可以这样做:
public class Foo
{
public int Apples { get; set; }
public bool Banana { get; set; }
public Bar Clementine { get; set; }
}
var myFoo = new Foo { Apples = 1, Banana = true, Clementine = new Bar() };
或者,您仍然可以使用构造函数,但不必添加所有私有字段。使用代码snippits或resharper可以快速输入和快速输入。缺点是,如果没有更多代码,您无法验证参数输入。这取决于谁将消耗你的类,以及int Apples是明确设置而不仅仅是0的重要性。
答案 2 :(得分:2)
您还可以使用C#片段,这样可以非常轻松地创建代码,例如prop,ctor,propdp,prope。无论如何这里是一个列表,这可能会有所帮助。
答案 3 :(得分:1)
您可以使用自动属性:
public Bar Clementine
{
get;
set;
}
这至少会为你节省一些打字。
另外你应该购买resharper - 我知道你说是免费的,但是一旦你意识到你节省了多少时间它就基本上是免费的。
答案 4 :(得分:1)
这可以使用System.CodeDom中的类来完成。有关示例,请参阅CodeDomProvider的帮助。我使用它来创建一个带有flags属性的托管枚举,该属性基于类型库中定义的IDL枚举。
答案 5 :(得分:1)
XSD工具可以为您完成此操作。只需编写一个表示对象的模式,XSD就会生成相应的类。
答案 6 :(得分:0)
对于您提供的示例,以下内容在功能上是等效的:
public class Foo {
public int Apples;
public bool Banana;
public Bar Clementine;
}
new Foo { Apples = 1, Banana = false, Clementine = new Bar() };
如果不知道你想要解决什么问题,很难提出更好的选择。这些是什么样的物体?消息?数据文件的运行时表示?
您可能需要考虑替代表示,如元组或原始数组。