Одним из способов решения этой проблемы является создание класса животных:
public interface IAnimal
{
int LegCount { get; }
}
public abstract class Animal: IAnimal
{
public virtual int LegCount {get{return 4;}}
public event EventHandler<AnimalRequiredEventArgs<Animal>> AnimalRequired;
protected virtual void OnAnimalRequired(AnimalRequiredEventArgs e)
{
// Make a temporary copy of the event to avoid possibility of
// a race condition if the last subscriber unsubscribes
// immediately after the null check and before the event is raised.
EventHandler<AnimalRequiredEventArgs<Animal>> handler = AnimalRequired;
if (handler != null)
{
handler(this, e);
}
}
}
public class Dog : Animal
{
public override int LegCount { get { return 4; } }
}
public class Octopus : IAnimal
{
public override int LegCount { get { return 8; } }
}
Затем вы можете переопределить OnAnimalRequired в каждом производном классе, если хотите.
Для клиентов будет одно событие, представленное абстрактным базовым классом.
Надеюсь, это поможет.
Схемы логически таблицы группы, процедуры, просматривают вместе. Все связанные с сотрудником объекты в employee
схема, и т.д.
можно также дать полномочия всего одной схеме, так, чтобы пользователи могли только видеть схему, у них есть доступ к и ничто иное.
Они могут также обеспечить своего рода защиту коллизии именования для сменных данных. Например, новая функция Change Data Capture в SQL Server, 2008 помещает таблицы, которые это использует в отдельной схеме CDC. Таким образом, они не должны волноваться о конфликте имен между таблицей CDC и реальной таблицей, используемой в базе данных, и в этом отношении может сознательно теневой названия реальных таблиц.
Я думаю, что схемы похожи на большое количество новых возможностей (ли к SQL Server или любому другому программному инструменту). Необходимо тщательно оценить, смещает ли преимущество добавления его к комплекту разработчика потерю простоты в разработке и реализации.
Это смотрит на меня как схемы, примерно эквивалентны дополнительным пространствам имен. Если Вы находитесь в ситуации, где имена объектов сталкиваются, и гранулярность полномочий не достаточно прекрасна, вот инструмент. (Я был бы склонен сказать, что могли бы быть вопросы проектирования, с которыми нужно иметь дело на более фундаментальном уровне сначала.)
проблема может состоять в том, что, если это там, некоторые разработчики начнут небрежно использовать его для краткосрочного преимущества; и после того как это там, это может стать кудзу.
разработка - каждый из наших devs заставляет их собственную схему как песочницу играть в.