IPersistable接口-任何更改字段名称的技巧或破解

本文关键字:破解 接口 任何更 改字段名 IPersistable | 更新日期: 2023-09-27 18:21:19

对于一个可以保存在持久性介质中的类,我正在创建一个名为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是一个属性)更改为有意义的名称?

IPersistable接口-任何更改字段名称的技巧或破解

如果您希望能够持久化现有类型(如int或string),那么接口对您没有帮助。也许可以使用包装类来代替接口?类似于:

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

怎么了?

public interface IPersistable
{
    String PersistenceId { get; }
}
Public Class Customer : IPersistable
{
    public string PersistenceId { get; private set; }
    public string UserId { 
         get { return PersistenceId; } 
    }
  .
  .
  .
}

试试这样的东西:

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)
   {
   }
}