Каковы некоторые примеры использования генераторов в C#/VB.NET и почему вы хотите использовать дженерики?Примеры использования Generics в .Net (C#/VB.NET)
ответ
Просто, вы объявляете тип или метод с дополнительными тегами, чтобы указать общие биты:
class Foo<T> {
public Foo(T value) {
Value = value;
}
public T Value {get;private set;}
}
выше определяет общий тип Foo
«из T
», где T
предоставляется вызывающей стороной. По соглашению, аргументы родового типа начинаются с T. Если есть только один, T
прекрасно - иначе назвать их все с пользой: TSource
, TValue
, TListType
и т.д.
В отличие от шаблонов C++, .NET дженерики предоставляются во время выполнения (не трюки компилятора). Например:
Foo<int> foo = new Foo<int>(27);
Все T
s были заменены int
в выше. При необходимости, вы можете ограничить общие аргументы с ограничениями:
class Foo<T> where T : struct {}
Теперь Foo<string>
откажется компилировать - в string
не структура (значение типа). Допустимые ограничения:
T : class // reference-type (class/interface/delegate)
T : struct // value-type except Nullable<T>
T : new() // has a public parameterless constructor
T : SomeClass // is SomeClass or inherited from SomeClass
T : ISomeInterface // implements ISomeInterface
Ограничения также может включать в себя другие аргументы шаблонного типа, например:
T : IComparable<T> // or another type argument
Вы можете иметь столько общие аргументы, как вам нужно:
public struct KeyValuePair<TKey,TValue> {...}
Другие вещи Примечание:
- s tatic и т. д. определены на комбинацию общего типа - поэтому статическое поле на
Foo<int>
является отдельным для него наFoo<float>
. - методы могут быть обобщенными слишком - попытаться избежать, используя те же имена, как класс используется, так как вы не сможете неоднозначность
- вложенных типов наследуют общие типы от своих родителей
, например, :
class Foo<T> {
class Bar<TInner> {} // is effectively Bar<T,TInner>, for the outer T
}
Отличный ответ. Из любопытства (новичок в дженериках) - почему мы должны включать
@ JᴀʏMᴇᴇ используется в качестве заполнителя до тех пор, пока определение не будет подключено. –
@ JᴀʏMᴇᴇ это может быть '
Пример 1: Вы хотите, чтобы создать тройной класс
Class Triple<T1, T2, T3>
{
T1 _first;
T2 _second;
T3 _Third;
}
Exa mple 2: Вспомогательный класс, который будет анализировать любое значение перечисления для данного типа данных
static public class EnumHelper<T>
{
static public T Parse(string value)
{
return (T)Enum.Parse(typeof(T), value);
}
}
Наиболее распространенные причины и случаи использования для генериков описаны в документации MSDN, упомянутой ранее. Одно из преимуществ дженериков, которые я хотел бы добавить, заключается в том, что они могут улучшить поддержку инструмента в процессе разработки. Инструменты рефакторинга, такие как интегрированные в Visual Studio или ReSharper, основаны на анализе статического типа для предоставления помощи при кодировании.Поскольку генераторы обычно добавляют больше информации о типе к вашей объектной модели, есть больше информации для таких инструментов для анализа и для помощи в кодировании.
На концептуальном уровне дженерики помогают решать «сквозные» проблемы независимо от области вашего приложения. Независимо от того, разрабатываете ли вы финансовое приложение или книжный магазин, вам рано или поздно нужно будет хранить коллекции вещей, будь то счета, книги или что-то еще. Реализация таких коллекций, как правило, мало что знает о вещах, которые должны храниться в этих коллекциях. Следовательно, общие коллекции, поставляемые с платформой .NET, являются основным примером использования предикатов.
Одно общее и чрезвычайно полезное использование дженериков - это строго типизированные классы коллекций. Традиционно всем классам коллекции пришлось передавать объекты и возвращать объекты при запросе. Вы должны были обработать все преобразования типов самостоятельно. С дженериками вам не обязательно это делать. Вы можете иметь List (Of Integer), и когда вы запрашиваете значения из него, вы получите целые числа. Вы не получите объекты, которые затем вам нужно преобразовать в целые числа.
private void button1_Click_1(object sender, RoutedEventArgs e)
{
TextValue<string, int> foo = new TextValue<string, int>("",0);
foo.Text = "Hi there";
foo.Value = 3995;
MessageBox.Show(foo.Text);
}
class TextValue<TText, TValue>
{
public TextValue(TText text, TValue value)
{
Text = text;
Value = value;
}
public TText Text { get; set; }
public TValue Value { get; set; }
}
private void button1_Click_1(object sender, RoutedEventArgs e)
{
TextValue<string, int> foo;
List<TextValue<string, int>> listTextValue = new List<TextValue<string, int>>();
for (int k = 0; k < 5; ++k)
{
foo = new TextValue<string, int>("",0);
foo.Text = k.ToString();
foo.Value = k;
listTextValue.Add(foo);
otherList.
MessageBox.Show(foo.Text);
}
}
class TextValue<TText, TValue>
{
public TextValue(TText text, TValue value){Text = text; Value = value;}
public TText Text { get; set; }
public TValue Value { get; set; }
}
Основным примером будет:
class Other{
class Generic<T>
{
void met1(T x);
}
static void Main()
{
Generic<int> g = new Generic<int>();
Generic<string> s = new Generic<string>();
}
}
- 1. Примеры использования Google Admin SDK для .NET
- 2. Нормализация .net generics
- 3. Каковы преимущества использования Generics?
- 4. Расширение использования C# generics?
- 5. Protobuf-net и generics
- 6. Примеры/Примеры использования здания собственного ControllerFactory?
- 7. Примеры примеров .NET Gridview
- 8. Примеры шаблонов EAV в .NET
- 9. Практические примеры использования ConcurrentHashMap
- 10. Примеры использования бинарного поиска
- 11. Масштабируемость Примеры использования
- 12. Примеры использования entry_point
- 13. Примеры использования шаблона Signleton
- 14. Примеры использования аннотаций
- 15. Примеры использования параметра radix
- 16. Плохие примеры использования scala.concurrent.blocking?
- 17. Примеры использования MSDN firefox?
- 18. ITextSharp PdfCopy примеры использования
- 19. Примеры использования JSF
- 20. Лучшие примеры использования App.Config?
- 21. MVC Примеры использования var
- 22. Примеры использования Crate/PDO
- 23. Примеры использования HTML-таблицы
- 24. Примеры нетривиального использования fexpr
- 25. Примеры использования для _.result
- 26. Примеры использования дескрипторов в Python
- 27. Примеры использования MergeOption в EF
- 28. Примеры использования lsqcurvefit в R
- 29. Примеры использования RedisStore в socket.io
- 30. Примеры использования C#
Этот вопрос является слишком общим –
Вы говорите о открытых дженериков или закрытых дженериков? В основном, как бы «использовать» их или как «сделать» их? или оба? – Joseph
что sambo99 сказал - ТАК нужен «слишком расплывчатый», чтобы дополнить «слишком локализованным» – annakata