我正在使用代表pdf的类来填充PDF应用程序。我在pdf上的每个文本框中都有一个属性,并且使用属性来指定属性映射到的pdf文本框。我的所有PDF都具有相同的属性,但pdf使用不同的文本框名称。因此,我能想到的唯一解决方案是创建一个基类,并让每个应用程序类型扩展我的基类并覆盖每个属性,只是为了抛出新的属性值。有更简单的方法吗?
示例(请注意,Application1和Application2之间的唯一区别是ITextField值从“TextBox1”更改为“TextBox2”:
public class Application
{
private string accountNumber;
public virtual string AccountNumber
{
get { return this.accountNumber; }
set { this.accountNumber = value; }
}
}
public class Application1 : Application
{
[ITextField("TextBox1")]
public override string AccountNumber
{
get
{
return base.AccountNumber;
}
set
{
base.AccountNumber = value;
}
}
}
public class Application2 : Application
{
[ITextField("TextBox2")]
public override string AccountNumber
{
get
{
return base.AccountNumber;
}
set
{
base.AccountNumber = value;
}
}
}
由于
答案 0 :(得分:0)
我知道这是一个糟糕的答案,但这似乎是一个非常好的方法。它也应该适用于未来的变化。
答案 1 :(得分:0)
如果该值确实是系统的一部分,那么可能将其作为属性:
public string AccountNumber {get;set;}
public string AccountNumberTextField {get;set;}
然后,您可以使用不同的属性来生成两个Application
实例(相同类型)。这实际上取决于具体情况。
Eric Lippert有一篇关于何时(而不是)使用属性的博客:Properties vs. Attributes
答案 2 :(得分:0)
如果你打算使用属性,我会说基类不是正确的选择。要定义这样的方案,我会在基类上选择接口。维护的代码较少,它会给你带来同样的效果。
public interface IApplication
{
string AccountNumber { get; set; }
}
public class Application1 : IApplication
{
[ITextField("TextBox1")]
public string AccountNumber { get; set; }
}
public class Application2 : IApplication
{
[ITextField("TextBox2")]
public override string AccountNumber { get; set; }
}
此外,您可以使用基类构思来包含将属性映射到文本字段的字典,并将其设置在派生类中......如果每个属性中都包含大量属性,那么这只会非常有效您需要执行此操作的表单。
public abstract class Application
{
public Application() { }
private Dictionary<string, string> mappings = new Dictionary<string, string>();
public Dictionary<string, string> Mappings
{
get { return mappings; }
}
public string AccountNumber { get; set; }
protected abstract void ProvideMappings();
}
public class Application1 : Application
{
protected override void ProvideMappings()
{
Mappings.Add("AccountNumber", "TextBox1");
}
}
public class Application2 : Application
{
protected override void ProvideMappings()
{
Mappings.Add("AccountNumber", "TextBox2");
}
}
真的需要更多的背景来说明哪些是好主意。用例将推动具体细节。例如,如果它将PropertyInfo映射到PDF字段的字符串名称,字典可以帮助你更多,它只取决于你如何使用它。