["","","37 C# ","A.srwsrrrtsz3BCXCST~~}T~~YF7G56455F+BCCaBBBC^CC(BC/BBXS}T~~}T~~","Generic methods"," have type parameters. They provide a way to parameterize the types used in a method. This means you can provide only one implementation and call it with different types. Generic methods require an unusual syntax form. ","Generic Class ","generic","Note: ","The syntax form for the declaration uses the <T> characters after the method name but before the formal parameter list.","Example."," This program demonstrates the use of a generic method. Generic methods use at least one explicit type parameter, which is customarily the type T or V or TValue or similar. ","Also: ","This type is an open type. It is not precisely described in the program. Few assumptions about its representation can be made.","ins","class","adsbygoogle","data-ad-client","ca-pub-4712093147740724","data-ad-slot","6227126509","data-ad-format","auto","ins","class","adsbygoogle","data-ad-client","ca-pub-4712093147740724","data-ad-slot","6227126509","data-ad-format","auto","Based on:"," .NET 4.7 (2017)\n\n","C# program that declares generic method","\n\nusing System;\nusing System.Collections.Generic;\n\nclass Program\n{\n static List<T> ","GetInitializedList","<T>(T value, int count)\n {","\n // This generic method returns a List with ten elements initialized.\n // ... It uses a type parameter.\n // ... It uses the \"open type\" T.\n ","List<T>"," list = new List<T>();\n for (int i = 0; i < count; i++)\n {\n list.Add(value);\n }\n return list;\n }\n\n static void Main()\n {","\n // Use the generic method.\n // ... Specifying the type parameter is optional here.\n // ... Then print the results.\n ","List<bool> list1 = GetInitializedList(true, 5);\n List<string> list2 = GetInitializedList<string>(","\"Perls\"",", 3);\n ","foreach"," (bool value in list1)\n {\n Console.WriteLine(value);\n }\n ","foreach"," (string value in list2)\n {\n Console.WriteLine(value);\n }\n }\n}\n\n","Output","\n\nTrue\nTrue\nTrue\nTrue\nTrue\nPerls\nPerls\nPerls","This program"," uses a generic method to construct a List with a certain number of elements of a certain type and with a specific initial value. The GetInitializedList member is the generic method and it uses a type parameter with name T. ","List ","list","Note: ","The first parameter to the GetInitializedList method is also a value of type T.","And: ","When you specify the type parameter, you can access the type parameter from other parts of the method signature as shown.","Finally,"," the program proves the correctness of the logic in the GetInitializedList method. It prints the values of a 5-element List of Booleans, and the values of the 3-element List of strings. ","Console.WriteLine ","console","Bool ","bool","Strings ","string","And: ","Each of those values has the value we specified in the 2 method invocations to the GetInitializedList call.","Discussion."," Let's examine the C# language specification's description of type parameters in classes and methods. The specification describes in precise detail all of the results for computing type inference matches. ","Also: ","It describes the algorithm used by the language compiler. But these details are not useful for most programs.","Tip: ","Do not rely on language specification details in your program. Most developers do not study language specifications at length.","Disambiguation."," Much complexity in generic methods involves disambiguation, the process by which the exact method you want to invoke is searched for and selected. This is also referred to as part of method overload resolution. ","Overload ","overload","Note: ","You can often omit the type parameter, but not where the method call cannot be determined from the context.","In C# programming,"," many methods are generic methods. Array.Resize and Array.IndexOf are generic methods. This provides them with a performance boost over a version that uses explicit casting, and possibly improved reliability. ","Array.Resize ","array-resize","Array.IndexOf ","array-indexof","Summary."," We examined generic methods and how they can be declared and invoked. Further, we touched on the concept of open types and type parameters and their syntax forms. We noted the problems of disambiguation and type inference. ","ins","class","adsbygoogle","data-ad-client","ca-pub-4712093147740724","data-ad-slot","3679700504","data-ad-format","link","ins","class","adsbygoogle","data-ad-client","ca-pub-4712093147740724","data-ad-slot","6227126509","data-ad-format","auto"]