Как создать группу методов / свойств в классе? - PullRequest
7 голосов
/ 01 сентября 2010

Я использую платформу сущностей с веб-службой, и у меня есть объекты частичных классов сущностей, которые были автоматически созданы веб-службой.

Я хотел бы расширить эти классы, но я бы хотел сгруппировать их всгенерированный класс аналогично тому, как это делает пространство имен (кроме как внутри класса).

Вот мой сгенерированный класс:

public partial class Employee : Entity
{
   public int ID { get; set; }
   public string FirstName { get; set; }
   public string LastName { get; set; }
}

И я хочу добавить некоторые новые свойства,функции и т. д. похожи на:

public partial class Employee : Entity
{
   public string FullName {
      get { return this.FirstName + " " + this.LastName; }
   }
}

Однако я хотел бы сгруппировать любые дополнительные свойства, чтобы у меня было немного более заметное отделение от сгенерированных методов.Я хотел бы иметь возможность вызывать что-то вроде:

myEmployee.CustomMethods.FullName

Я мог бы создать другой класс в частичном классе под названием CustomMethods и передать ссылку на базовый класс, чтобы я мог получить доступ к сгенерированным свойствам.Или, может быть, просто назовите их особым образом.Но я не уверен, что это лучшее решение.Я ищу идеи сообщества, которые являются чистыми и подпадают под хорошую практику.Спасибо.

Ответы [ 2 ]

17 голосов
/ 01 сентября 2010

Вот еще одно решение с использованием явных интерфейсов:

public interface ICustomMethods {
    string FullName {get;}
}

public partial class Employee: Entity, ICustomMethods {
    public ICustomMethods CustomMethods {
       get {return (ICustomMethods)this;}
    }
    //explicitly implemented
    string ICustomMethods.FullName {
       get { return this.FirstName + " " + this.LastName; }
    }
}

Использование:

string fullName;
fullName = employee.FullName; //Compiler error    
fullName = employee.CustomMethods.FullName; //OK
2 голосов
/ 01 сентября 2010
public class CustomMethods
{
    Employee _employee;
    public CustomMethods(Employee employee)
    {
        _employee = employee;
    }

    public string FullName 
    {
        get 
        {
            return string.Format("{0} {1}", 
                _employee.FirstName, _employee.LastName); 
        }
    }
}

public partial class Employee : Entity
{
    CustomMethods _customMethods;
    public CustomMethods CustomMethods
    {
        get 
        {
            if (_customMethods == null)
                _customMethods = new CustomMethods(this);
            return _customMethods;
        }
    }
}

обычно я бы помещал свойства типа FullName прямо в класс Partial, но я понимаю, почему вы можете захотеть разделить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...