Я использую структуру сущностей с веб-службой, и у меня есть объекты частичных классов сущностей, которые были автоматически сгенерированы веб-службой.
Я хотел бы чтобы расширить эти классы, но я хотел бы сгруппировать их в сгенерированный класс таким же образом, как и пространство имен (за исключением внутри класса).
Вот мой сгенерированный класс:
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 и передать ссылку на базовый класс, чтобы я мог получить доступ к сгенерированным свойствам. Или просто назовите их по-особенному. Но я не уверен, что это лучшее решение. Я ищу идеи сообщества, которые чисты и соответствуют передовой практике. Спасибо.
Вот еще одно решение с использованием явных интерфейсов:
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
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, но я понимаю, почему вам может понадобиться разделение.