如何在.net中附加类的属性附加信息

时间:2011-11-13 02:42:20

标签: .net class-design

我想创建一个商业实体。我想存储每个属性的附加信息

e.g。

    Public Class BE
    {
        private string _fundCity;

        public string FUND_CITY 
        {
            get { return _fundCity; }
            set { _fundCity = value; }
        }
    }

对于FUND_CITY,我想在BE中存储“StartOffSet”和“EndOffSet”值。 可以帮助一些人。

2 个答案:

答案 0 :(得分:1)

如果你想拥有与FUND_CITY直接相关的属性,那么通常你会把它作为一个对象,并将属性添加到新对象中,你仍然可以将它存储在你的对象中{ {1}}就像你现在一样。

如果您希望BE保留为字符串,则必须在FUND_CITY课程中添加StartOffsetEndOffset作为属性,就像使用FUND_CITY一样。我会给你一个例子,但你没有指定这两个属性是什么类型。

编辑:

听起来你需要的是一个带有泛型的包装类。如果您想在BE上跟踪{strong>每个属性的StartOffsetEndOffset,那么首先要创建一个将用于BE中每个属性的泛型类:< / p>

BE

public class MyProperty<T> { public MyProperty(T propertyValue) { PropertyValue = propertyValue; } public int StartOffset { get; set; } public int EndOffset { get; set; } public T PropertyValue { get; set; } } 用于保存(或 wrap )属性的实际值。然后,您的班级PropertyValue会更改为:

BE

然后您可以像这样使用它:

public class BE
{
    public MyProperty<string> FUND_CITY { get; set; }

    public MyProperty<int> SomeOtherProperty { get; set; }
}

如果你想更进一步并保留这些列表,那么你可以使用内置的通用List<T> type,但是你有一个小问题:List&lt; T&gt;希望其所有内容属于同一类型。您可以通过使用基类或仅通过在List&lt; T&gt;中转换所有内容来绕过它。输入class Program { static void Main(string[] args) { var myBE = new BE(); myBE.FUND_CITY = new MyProperty<string>("some random string value") { StartOffset = 0, EndOffset = 10 }; myBE.SomeOtherProperty = new MyProperty<int>(999); Console.ReadKey(); } } 。以下是使用基类的示例,它与上面的代码相比有一点变化:

object

答案 1 :(得分:0)

您需要创建一个单独的类(请注意,我的语法是使用VS2010自动设置器属性;如果您使用的是早期版本,则需要以旧式方式创建属性:

public class FundCity
{
  public string Name {get; set;}
  public int StartOffSet {get; set;}
  public int EndOffSet{get; set;}

    public override string ToString()
    {
        return this.Name;
    }
}

public class BE
{
private FundCity _fundCity;
 public FundCity FUND_CITY 
        {
            get
            {
              return _fundCity;
            }
             set 
            {
               _fundCity=value;
            }
        }
}

使用通用解决方案进行更新

public class DataPoint<T>
{
    public T value {get; set; }

    public int StartOffset {get; set; }
    public int EndOffset { get; set; }

    public override string ToString()
    {
        return value.ToString();
    }
}

public class BE
{
    public DataPoint<String> FUND_CITY { get; set; }
}