Gammle kan och förstår sig på ref!
Man kan ju undra om ordspråket lära gamla hudar att sitta stämmer?
Försökte förstå och lära mig detta med ref parametern i metoder men stirrade mig helt blind på det hela ett bra tag innan jag tror kronan föll ner ordentligt. Min övning skulle då utöva sig på följande sätt.
Lektion 05 del 4-6 (3 olika delar jag nu gått igenom i lektion 5)
4) Skriv ett program som från konsolen möjligör input av ett förnamn. För en variabel x i Main-metoden där du lagrar detta namn.
Skriv även en statisk void-metod som tar en string y som parameter och som till denna y lägger första bokstaven i namnet. Skriv sedan ut x. Fundera lite innan du ser resultatet om vad det bör stå!
Svar: x i detta fall har inte förändrats alls eftersom vi inte har gjort nått med det än. Y kan dessutom inte returneras.
Skulle det gå så skulle y i detta fall skriva ut första bokstaven i det inmatade förnamnet från x.
Program.cs
Console.Write("Please enter your firstname: ");
string x = Convert.ToString(Console.ReadLine());
Console.Write("\nHey there, " + x); //Skriver ut inmatat värde från användaren
Console.ReadLine();
Functions.cs
public void myName(string x)
{
string y = "";
y = x.Substring(0, 1); // Plockar fram första tecknet från värdet i x och kör in det i y.
// return = y //Funkar inte här eftersom man inte kan returnera ett värde i en void.
}
5) Använd ovanstående program men ändra i metoden så att första bokstaven tilldelas variabeln x istället. Skriv sedan ut x. Fundera på innan vad det borde stå!
Svar: Ändringen som behöver göras är att ändra void till sträng och returnera x.
Functions.cs
public void myName(string x)
{
string y = "";
y = x.Substring(0, 1);
x = y;
return x;
}
6) Använd ovanstående program men ändra i metodens parameteruppsättning så att inparametern är en referens (nyckelordet: ref). Fundera på innan vad det bör stå!
Svar: Om allt funkar som det skall borde resultatet bli första tecknet/bokstaven i förnamnet.
Program.cs
Console.Write("Please enter your firstname: ");
string x = Convert.ToString(Console.ReadLine());
Console.Write("\nHey there, " + x); //Skriver ut inmatat värde från användaren
FredrikBLL.BLL.Functions functions = new FredrikBLL.BLL.Functions(); // Skapar ett nytt objekt functions
functions.myName(ref x);
Console.WriteLine("\nYour names first letter is: " + x); //Returnerat värde från myPublicName
Console.ReadLine();
Functions.cs
public void myName(ref string x)
{
string y = "";
y = x.Substring(0, 1);
x = y;
}
Resultatet:

Kommer nu att fortsätta med sista i detta som är del 7.
7) Använd ovanstående program men ändra i metoden så att första bokstaven tilldelas variabeln y istället.
Skriv sedan ut x. Fundera....
Svar: Svaret blir ...... Det inmatade värdet!
Please enter your firstname: Fredrik
Hey there, Fredrik
Your names first letter is: Fredrik
Försökte förstå och lära mig detta med ref parametern i metoder men stirrade mig helt blind på det hela ett bra tag innan jag tror kronan föll ner ordentligt. Min övning skulle då utöva sig på följande sätt.
Lektion 05 del 4-6 (3 olika delar jag nu gått igenom i lektion 5)
4) Skriv ett program som från konsolen möjligör input av ett förnamn. För en variabel x i Main-metoden där du lagrar detta namn.
Skriv även en statisk void-metod som tar en string y som parameter och som till denna y lägger första bokstaven i namnet. Skriv sedan ut x. Fundera lite innan du ser resultatet om vad det bör stå!
Svar: x i detta fall har inte förändrats alls eftersom vi inte har gjort nått med det än. Y kan dessutom inte returneras.
Skulle det gå så skulle y i detta fall skriva ut första bokstaven i det inmatade förnamnet från x.
Program.cs
Console.Write("Please enter your firstname: ");
string x = Convert.ToString(Console.ReadLine());
Console.Write("\nHey there, " + x); //Skriver ut inmatat värde från användaren
Console.ReadLine();
Functions.cs
public void myName(string x)
{
string y = "";
y = x.Substring(0, 1); // Plockar fram första tecknet från värdet i x och kör in det i y.
// return = y //Funkar inte här eftersom man inte kan returnera ett värde i en void.
}
5) Använd ovanstående program men ändra i metoden så att första bokstaven tilldelas variabeln x istället. Skriv sedan ut x. Fundera på innan vad det borde stå!
Svar: Ändringen som behöver göras är att ändra void till sträng och returnera x.
Functions.cs
public void myName(string x)
{
string y = "";
y = x.Substring(0, 1);
x = y;
return x;
}
6) Använd ovanstående program men ändra i metodens parameteruppsättning så att inparametern är en referens (nyckelordet: ref). Fundera på innan vad det bör stå!
Svar: Om allt funkar som det skall borde resultatet bli första tecknet/bokstaven i förnamnet.
Program.cs
Console.Write("Please enter your firstname: ");
string x = Convert.ToString(Console.ReadLine());
Console.Write("\nHey there, " + x); //Skriver ut inmatat värde från användaren
FredrikBLL.BLL.Functions functions = new FredrikBLL.BLL.Functions(); // Skapar ett nytt objekt functions
functions.myName(ref x);
Console.WriteLine("\nYour names first letter is: " + x); //Returnerat värde från myPublicName
Console.ReadLine();
Functions.cs
public void myName(ref string x)
{
string y = "";
y = x.Substring(0, 1);
x = y;
}
Resultatet:

Kommer nu att fortsätta med sista i detta som är del 7.
7) Använd ovanstående program men ändra i metoden så att första bokstaven tilldelas variabeln y istället.
Skriv sedan ut x. Fundera....
Svar: Svaret blir ...... Det inmatade värdet!
Please enter your firstname: Fredrik
Hey there, Fredrik
Your names first letter is: Fredrik
Kommentarer
Trackback