F3: Generiska typer Flashcards

1
Q

List< int> numbers = new List< int>();

What is “List< T>” called?
What is “T” called?

A

“List< T>” is a generic type, specifically a generic class
“T” is a type parameter

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Why are generics so important?

A

Generics allow us to write code that works with any data type while retaining static type safety. This means we can reuse the same code for different data types, and still let the compiler find type errors.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Kan alla typer vara generiska?

A

Nej! Vissa algoritmer kan inte uttryckas utan kunskap om den underliggande typen.
Kod som gör antaganden om den underliggande typen kan inte vara generisk(utan s.k. constraints)

Exempel på antaganden som ej fungerar:
* +, -, >, ==, !=, .Name, .Start()

När du arbetar med generiska typer i C#, T kan vara antingen en värdetyp eller en referenstyp. Men utan specifika begränsningar (constraints), vet inte kompilatorn om T är en värdetyp eller referenstyp, och därför kan den inte anta att vissa operationer är säkra eller giltiga.

För att hantera dessa begränsningar introducerar C# “constraints” i generiska definitioner, som låter dig specificera mer information om vad T är. Till exempel, om du vet att en viss metod bara är meningsfull för referenstyper, kan du begränsa T till referenstyper med hjälp av where T : class begränsningen. Det finns också motsvarande where T : struct för värdetyper.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

What are the main benefits of generics?

A
  • Allows writing of code that can be used with whichever datatype
  • Allows you to write flexible, reusable code without sacrificing type safety
  • Reduces duplication
  • Improves maintainability of our code
  • No need to know the datatype prior to implementation
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Exempel på en typ som inte stödjer operatorn == i C#?

A

Struct

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Vad är en Typ-inferens och vilken funktion fyller den?

A

En typinferens innebär att kompilatorn automatiskt kan bestämma den mest lämpliga datatypen för variabeln baserat på det värde som tilldelas den.

i C# är exempelvis “var” en typinferens

ex.
* var number = 10; // number är av typen int
* var text = “Hello”; // text är av typen string

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Vad är skillnaden på Dynamisk och statisk typsäkerhet?

A

Statisk typsäkerhet (Compile-time type safety)

  • Denna typ av säkerhet granskas vid kompileringstid.
  • Om en operation bryter mot typreglerna i ett statiskt typat språk(ex. C#) kommer kompilatorn att generera ett felmeddelande, och koden kommer inte att kompileras.
  • Ex. försök tilldela en sträng till en int-variabel

Dynamisk typsäkerhet (Runtime type safety)

  • Denna typ av säkerhet granskas vid körningstid.
  • I dynamiskt typade språk(ex Python) avgörs typen av en variabel vid körning, och operationer som inte är tillåtna för den aktuella typen kommer att resultera i körningsfel.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Fördelar med Statisk typsäkerhet

A
  • Många typrelaterade fel upptäcks tidigt i utvecklingsprocessen, vilket minskar antalet buggar i körande program.
    *Optimering: Kompilatorn kan producera mer effektiv och optimerad kod eftersom den känner till de exakta datatyperna i förväg.
  • Tydlighet: Koden kan ofta vara lättare att läsa och förstå eftersom datatyperna explicit anges.
  • Refaktorisering: Verktyg kan lättare identifiera och ändra relaterad kod när man refaktorerar tack vare den statiska typningen.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

Fördelar med dynamisk typsäkerhet

A
  • Flexibilitet: Kan skriva kod snabbare och kortare kod då du ej behöver förklara varje variabels typ
  • Lättare metaprogrammering: Dynamiska språk tillåter ofta mer avancerade metaprogrammeringstekniker, där koden kan ändra sig själv vid körning.
  • Generella funktioner: Funktioner kan ofta vara mer generella eftersom de kan fungera med data av vilken typ som helst.
  • Behöver inte använda sig av mekanismer som Generics
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

Vad är skillnaden mellan klasserna?

public class CardPair
{
public Card First { get; init; }
public Card Second { get; init; }
}

public class DiceRollPair
{
public DiceRoll First { get; init; }
public DiceRoll Second { get; init; }
}

A

Den enda skillnaden mellan de två klasserna CardPair och DiceRollPair är typen av deras egenskaper.

Cardpair är avn typen Card
DiceRollpair är av typen DiceRoll

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

Hur skiljer sig Overloading och Generics?

A

Overloading är Olika implementationer för olika typer.

Generics är En implementation för alla typer

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

Vad är ett typargument?

A

Ett typargument är en specifik typ som du anger när du använder en generisk definition, som en generisk klass eller metod.

Ex.

var intList = new GenericList<int>();
var stringList = new GenericList<string>();</string></int>

Här är int och string typargument

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

.

A

pranked

How well did you know this?
1
Not at all
2
3
4
5
Perfectly