继承和属性值
我使用代表pdf的类填充PDF应用程序。我在pdf上有一个属性,每个文本框都使用属性来指定propery映射到的pdf文本框。我所有的PDF都具有相同的属性,但PDF使用不同的文本框名称。所以,我能想到的唯一解决方案就是创建一个基类,并让每个应用程序类型扩展我的基类并覆盖每个属性,只是为了抛出新的属性值。有一种更简单的方法吗?继承和属性值
例子(注意应用1和应用2之间的唯一区别是从“TextBox1的”到“TextBox2中的” ITextField价值的变化:
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;
}
}
}
感谢
如果你要使用的属性,我要说的是,基类是不是正确的选择。要定义这样的方案,我会选择基类上的接口。需要维护的代码更少,并且可以获得相同的效果。
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字段的字符串名称,字典可能会帮助您更多,这取决于您如何使用它。
我知道这是一个贫穷的答案,但看起来像是一个很好的方法,它也应该适用于未来的变化
如果该值是系统的真正部分,那么可能将其作为属性:
public string AccountNumber {get;set;}
public string AccountNumberTextField {get;set;}
然后,您可以拥有两个Application
实例(相同类型),只是具有不同的属性。这真的取决于上下文。
埃里克利珀对时(而不是)使用属性一个好的博客:Properties vs. Attributes
我认为这也是一个很好的答案......只是取决于他如何使用它。 – 2009-05-18 22:07:45
我有6个不同的应用程序,每个应用程序大约有120个字段。我想我要去基地路线。我喜欢只需为每个映射提供映射的想法。另外,我只需要编写代码来在基类中定义和设置属性。 – Striker 2009-05-19 14:47:54