Привет, ниже вы можете найти C# 2.0 Пример универсального свободного шаблона, который я только что придумал ;). Вызывается только общий код, но он вызывается без общего типа. У меня есть идея получше реализовать этот шаблон, но необходимо ввести третье использование нашего ключевого слова в C#., и я не могу это сделать. Однако, я мог бы сделать этот узор, и я надеюсь, что тебе это понравится. Теперь вы можете написать универсальный код, который будет использоваться так, как будто универсальный код не нужен., так что это похоже на JavaScript в C #, когда вы его используете, и на строгие типизированные обобщения, когда вы его пишете. ;).
namespace GenericFreePattern { using System; // Framework Code internal class Comparer<T> : Comparer where T : IComparable, IComparable<T> { public Comparer(T x1, T x2) { this.x1 = x1; this.x2 = x2; } private readonly T x1; private readonly T x2; public override int Compare() { return x1.CompareTo(x2); } } public class Comparer { internal Comparer() {} private readonly Comparer instance; public Comparer(IComparable x1, IComparable x2) { if (x1.GetType() != x2.GetType()) throw new InvalidOperationException( "Arguments have different types!"); instance = (Comparer)Activator.CreateInstance( typeof(Comparer<>) .MakeGenericType(x1.GetType()), new object[]{x1, x2}); } public virtual int Compare() { return instance.Compare(); } } // Client Code class Program { public static void Main(string[] args) { Console.WriteLine( "new Comparer(3,5).Compare() = {0}", new Comparer(3,5).Compare()); Console.Write("Press any key to continue..."); Console.ReadKey(true); } } }
п ;).
Пингбэк: Третье использование ключевого слова C# out с кодированием Roslyn Intro @ для дизайна.