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

C# IPersistable接口-任何更改字段名称的技巧或黑客,c#,inheritance,properties,interface,C#,Inheritance,Properties,Interface,对于可以保存在持久性介质中的类,我正在创建名为IPersistable的接口,该接口旨在提供persistenceId public interface IPersistable { private readonly string persistenceId; } 当然我不能执行上述操作,因为接口不允许字段。如果是的话,我会在下面完成它 Public Class Customer { private readonly string persistenceId; Public s

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

有什么问题

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)
   {
   }
}
公共接口不稳定
{
TType PersistenceId{get;}
}
公共抽象持久实体:iperstable
{
私有TType persistenceId;
公共TType PersistenceId
{
获取{return persistenceId;}
}
公共PersistableEntity(t类型persistenceId)
{
this.persistenceId=persistenceId;
}
}
公共类客户:PersistableEntity
{
公共客户(字符串persistenceId)
:base(persistenceId)
{
}
}

如果您希望能够持久化现有类型(如int或string),则接口将无法帮助您。也许可以使用包装类来代替接口?比如:

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

    public readonly string PersistanceId;
    public readonly T Data;
}
类可持久化
{
公共持久化(字符串PersistanceId,T数据)
公共只读字符串PersistanceId;
公共只读数据;
}

接口是供外部使用的公共契约,为什么使用此接口的人需要关心私有字段的调用?您不能更改公共成员名称,这将破坏合同。您似乎用类名或从类名推断出的内容作为此私有字段的前缀。这是不必要的
Customer.id
似乎比
Customer.customerId
更合适,而且还避免了为每个类重命名属性(无论如何这是不可能的)。另外,您是否知道可以在接口中具有属性?这意味着
Customer.UserId
Customer.PersistenceId
为什么我希望有两个做同样事情的id。tideentity会更好;)