где
// Продемонстрировать применение атрибута Obsolete,
using System;
class Test {
[Obsolete("Лучше использовать метод MyMeth2.")]
public static int MyMeth(int a, int b) {
return a / b;
}
// Усовершенствованный вариант метода MyMeth.
public static int MyMeth2(int a, int b) {
return b == 0 ? 0 : a / b;
}
static void Main() {
// Для этого кода выводится предупреждение.
Console.WriteLine("4 / 3 равно " + Test.MyMeth(4, 3));
//А для этого кода предупреждение не выводится.
Console.WriteLine("4 / 3 равно " + Test.MyMeth2(4, 3));
}
}
Когда по ходу компиляции программы в методе Main()
встречается вызов метода MyMeth()
, формируется предупреждение, уведомляющее пользователя о том, что ему лучше воспользоваться методом MyMeth2()
.
Ниже приведена вторая форма атрибута Obsolete
:
[Obsolete("сообщение", ошибка)]
где true
), то при использовании устаревшего элемента формируется сообщение об ошибке компиляции вместо предупреждения. Эта форма отличается тем, что программа, содержащая подобную ошибку, не будет скомпилирована в исполняемом виде.
ГЛАВА 18 Обобщения
Эта глава посвящена
Обобщения как языковое средство очень важны потому, что они позволяют создавать классы, структуры, интерфейсы, методы и делегаты для обработки разнотипных данных с соблюдением типовой безопасности. Как вам должно быть известно, многие алгоритмы очень похожи по своей логике независимо от типа данных, к которым они применяются. Например, механизм, поддерживающий очередь, остается одинаковым независимо от того, предназначена ли очередь для хранения элементов типа int
, string
, object
или для класса, определяемого пользователем. До появления обобщений для обработки данных разных типов приходилось создавать различные варианты одного и того же алгоритма. А благодаря обобщениям можно сначала выработать единое решение независимо от конкретного типа данных, а затем применить его к обработке данных самых разных типов без каких-либо дополнительных усилий.
В этой главе описываются синтаксис, теория и практика применения обобщений, а также показывается, каким образом обобщения обеспечивают типовую безопасность в ряде случаев, которые раньше считались сложными. После прочтения настоящей главы у вас невольно возникнет желание ознакомиться с материалом главы 25, посвященной коллекциям, так как в ней приведено немало примеров применения обобщений в классах обобщенных коллекций.
Что такое обобщения
Термин
Следует особо подчеркнуть, что в C# всегда имелась возможность создавать обобщенный код, оперируя ссылками типа object
. А поскольку класс object
является базовым для всех остальных классов, то по ссылке типа object
можно обращаться к объекту любого типа. Таким образом, до появления обобщений для оперирования разнотипными объектами в программах служил обобщенный код, в котором для этой цели использовались ссылки типа object
.