Это не возможно, почему?
В C#, это вызывается на Вас, что при наследовании открытых методов необходимо обнародовать их. Иначе они ожидают, что Вы не произойдете из класса во-первых.
Вместо того, чтобы использовать - отношения, необходимо было бы использовать - отношения.
разработчики языка не позволяют это нарочно так, чтобы Вы использовали наследование более правильно.
, Например, можно было бы случайно перепутать класс Автомобиль для получения из класса Механизм для получения, это - функциональность. Но Механизм является функциональностью, которая используется автомобилем. Таким образом, Вы хотели бы использовать - отношения. Пользователь Автомобиля не хочет иметь доступ к интерфейсу Механизма. И сам Автомобиль не должен путать методы Механизма со своим собственным. Ни будущие деривации Автомобиля.
, Таким образом, они не позволяют ему защищать Вас от плохих иерархий наследования.
, Что необходимо сделать вместо этого?
Вместо этого необходимо реализовать интерфейсы. Это оставляет Вас свободными иметь функциональность с помощью - отношения.
Другие языки:
В C++ Вы просто определяете модификатор перед базовым классом частных, общедоступных или защищенных. Это делает всех членов основы, которые были общедоступны к тому указанному уровню доступа. Кажется глупым мне, что Вы не можете сделать того же в C#.
реструктурированный код:
interface I
{
void C();
}
class BaseClass
{
public void A() { MessageBox.Show("A"); }
public void B() { MessageBox.Show("B"); }
}
class Derived : I
{
public void C()
{
b.A();
b.B();
}
private BaseClass b;
}
я понимаю, что названия вышеупомянутых классов немного спорны:)
Другие предложения:
Другие предложили сделать () и B () общественность и выдать исключения. Но это не делает дружественный класс для людей для использования, и он действительно не имеет смысла.
Я помню старые времена, когда использование 2 ^ n Length было лучше для выравнивания блоков на диске или в памяти. Выровненный блок оказался быстрее. Сегодня размеры "блоков" больше, а память и диск достаточно быстры, чтобы игнорировать выравнивание, кроме очень больших блоков, которые ист. (Что бы ни означало сегодня «очень большой» ...)
В наши дни это просто традиционно.
И еще одна причина, по которой я могу сказать: Есть только 10 типов людей: те, кто умеет бинарные, и другие.
И 2 ^ n -1 - кандидаты на простые числа Мерсена. так что это тоже чокнутый ...
Я не могу сказать, так как видел, что тренд «-1» по-разному используется для меньших / больших полей. Однако я думаю, что это не что иное, как Developer / dba OCD. Всегда хотят «круглые» числа, когда им действительно следует принимать решения о длине поля на основе бизнес-правил, а не «красивости»
На самом деле, я впервые слышу о такой «тенденции». Мои поля varchar всегда настолько длинные, насколько мне нужно.
Я бы сказал, что для этого нет особой причины. Просто предпочтение разработчика.
Не только уменьшилась отдача, но и если вы установили строковые типы с произвольными ограничениями, у вас гораздо больше шансов вызвать проблему, чем решить ее.
Если это действительно бизнес-ограничение, затем используйте тип TEXT (или аналогичный) и ограничение CHECK на длину и выберите число в соответствии с бизнес-ограничением, которое вы пытаетесь наложить.
СУБД, вероятно, будет реализовывать хранилище для типа TEXT идентично varchar ( х) в любом случае. Если это не так, и вам действительно интересно, вам следует изучить стратегии внутреннего хранилища вашей конкретной системы и подумать, есть ли какие-либо преимущества от varchar или нет.
Я не могу представьте на мгновение, почему они определяют размеры полей таким образом, либо по счету 2 ^ N, либо по 2 ^ N-1. С точки зрения SQL Server это больше похоже на неправильное представление о том, как SQL хранит эти данные на уровне страницы, чем на конкретную причину.
Я бы уделил больше внимания типам, возможному хранению вне страницы (SLoB / LoB) и строкам / страницам + удовлетворение бизнес-потребностей с помощью определения размера, чем формуле, основанной на использовании 2 ^ N и т.
Я думаю, это просто программисты выбирают число из воздуха, когда это не имеет особого значения.
Если бы вам пришлось установить предел в поле «примечания», например, непрограммист, вероятно, выберет 100 или 200 символов как круглое число, тогда как программист может подумать о 127 или 255 как круглое число.