IPersistable接口 - 任何改变字段名称的技巧或黑客

时间:2012-01-24 11:14:34

标签: c# inheritance properties interface

对于可以保存在持久性介质中的类,我创建名为IPersistable的接口,旨在提供persistenceId

public interface IPersistable
{
    private readonly string persistenceId;
}

当然我无法做到以上,因为接口不允许使用字段。如果确实如此,我将在下面完成它

Public Class Customer
{

 private readonly string persistenceId;

 Public string UserId
   {
     get{return persistenceId};
   }

 Public Customer(string customerId)
  {
    persistenceId = customerId;
  }
}

我已经继承了一个类,因此无法进行多重继承。我可以使用合成但接口似乎正确的事情在这里。向我展示一个干净利落的做法,而不是为每个需要持久化的类添加属性。

问题

如果可能,与IPersistable接口的类是否可以将属性的名称(如果persistenceId是属性)更改为有意义的内容?

3 个答案:

答案 0 :(得分:1)

有什么问题?

public interface IPersistable
{
    String PersistenceId { get; }
}

Public Class Customer : IPersistable
{

    public string PersistenceId { get; private set; }

    public string UserId { 
         get { return PersistenceId; } 
    }
  .
  .
  .
}

答案 1 :(得分:1)

尝试这样的事情:

public interface IPersistable<TType>
{
   TType PersistenceId { get; }
}

public abstract PersistableEntity<TType> : IPersistable<TType>
{
   private TType persistenceId;

   public TType PersistenceId
   {
       get { return persistenceId; }
   }

   public PersistableEntity(TType persistenceId)
   {
      this.persistenceId = persistenceId;
   }
}

public class Customer : PersistableEntity<string>
{
   public Customer(string persistenceId)
     : base(persistenceId)
   {
   }
}

答案 2 :(得分:1)

如果您希望能够保留现有类型(如int或string),则界面将无法帮助您。也许你可以使用包装类而不是接口?类似的东西:

class Persistable<T>
{
    public Persistable<T>(string PersistanceId, T Data)

    public readonly string PersistanceId;
    public readonly T Data;
}