IPersistable Interface - любой трюк или хак для изменения имени поля - PullRequest
1 голос
/ 24 января 2012

Для класса, который можно сохранить на постоянном носителе, я создаю интерфейс с именем 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 ]

1 голос
/ 24 января 2012

Попробуйте что-то вроде этого:

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)
   {
   }
}
1 голос
/ 24 января 2012

Интерфейс не поможет вам, если вы хотите сохранить существующие типы, такие как int или string.Может, вместо интерфейса вы могли бы использовать класс-оболочку?Что-то вроде:

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

    public readonly string PersistanceId;
    public readonly T Data;
}
1 голос
/ 24 января 2012

Что не так с?

public interface IPersistable
{
    String PersistenceId { get; }
}

Public Class Customer : IPersistable
{

    public string PersistenceId { get; private set; }

    public string UserId { 
         get { return PersistenceId; } 
    }
  .
  .
  .
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...