Avatar billede ahara Nybegynder
25. november 2006 - 11:17 Der er 7 kommentarer og
1 løsning

Templates i C#

Benytter man templates i C# som man gjorde det i C++ eller er der lavet en ny metode til disse opgaver?

I må gerne indsætte et eksempel.

Tak
AHR
Avatar billede arne_v Ekspert
25. november 2006 - 14:41 #1
der er noget i C# der hedder generics som minder noget om C++ templates
men det er ikke helt det samme
Avatar billede arne_v Ekspert
25. november 2006 - 14:42 #2
eksempel:

List<int> lst = new List<int>();
lst.add(1);
lst.add(2);
lst.add(3);
Console.WriteLine(lst[2]);
Avatar billede ahara Nybegynder
25. november 2006 - 15:04 #3
Tak Arne. Kender en lille smule til det, men i C++ kunne jeg have en funktion der modtog en int som parameter og en som modtog en double men ellers have samme kodeindhold. Dertil kunne jeg lave en template og ikke to funktioner.

Ovenstående viser du en liste. Hvad nu hvis jeg ønsker en funktion men som kan kaldes med forskellige parametre og evt. returnere en forskellig datatype.
Avatar billede arne_v Ekspert
25. november 2006 - 15:12 #4
det kan du også i C# - du kan bare ikke helt bruge den lige så fleksibelt
som i C++, men til gengæld findes koden kun i et eksemplar modsat C++ der
replikerer koden

eksemplet var tilsvarende en STL std::vector i C++
Avatar billede arne_v Ekspert
25. november 2006 - 15:13 #5
et mere genrelt eksempel:

using System;

public class MyComparer<T> where T : IComparable
{
    public static T Max(T a, T b)
    {
        if(a.CompareTo(b) > 0)
        {
            return a;
        }
        else
        {
            return b;
        }
    }
    public static T Min(T a, T b)
    {
        if(a.CompareTo(b) < 0)
        {
            return a;
        }
        else
        {
            return b;
        }
    }
}

public class Test
{
    public static void Main(string[] args)
    {
    Console.WriteLine(MyComparer<int>.Max(11,2));
    Console.WriteLine(MyComparer<int>.Min(11,2));
    Console.WriteLine(MyComparer<string>.Max("11","2"));
    Console.WriteLine(MyComparer<string>.Min("11","2"));
    }
}
Avatar billede ahara Nybegynder
25. november 2006 - 15:17 #6
Dette minder jo meget om templates. Godt eksempel. Prøver det lige af. Tak for hjlæpen. Svar og der er point
Avatar billede arne_v Ekspert
25. november 2006 - 15:41 #7
det du skal være opmærksom på er:

where T : IComparable

du kan kun bruge generics til operationer som du fortæller at T kan gøre
(i det her tilfælde at den har en CompareTo metode fordi den implementerer
IComparable)
Avatar billede arne_v Ekspert
25. november 2006 - 15:41 #8
og et svar
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester