Just nu i M3-nätverket
Gå till innehåll

Anropa method i class!


april3

Rekommendera Poster

Hej!

 

Jag har en class (Program) som ska ha en method, låt oss säga "private static int prova()".

 

Jag försöker anropa denna method från Main ment går icke!

 

Jag har provat med att skapa en instance av classen Program (pg) och anropa methoden Prova genom följande "pg.prova()" men icke!

 

Provat med att anropa methoden direkt genom följande "prova()" men inte det heller!!

 

Methoden har inga parametrar utan ska tilldela en variabel ett värde som läses in via Readline inom methoden Prova!

 

Alltså, anropa enmethod inom samma class, hur gör man normalt???

 

Tackar!

 

Länk till kommentar
Dela på andra webbplatser

Är klassen statisk? Har du deklarerat klassen som publik eller privat?

Först frågar du hur man anropar metoder i klassen utifrån, men du avslutar inlägget med att fråga hur man anropar metoder inom klassen inifrån klassen. Vilket är det?

 

Länk till kommentar
Dela på andra webbplatser

Jag menade anropa en method inom samma klass!

 

Class Test

{

 

Private members;

 

}

-----------------------------------------

Class Program

{

 

static void Main(string[] args)

{

 

Här ska man anropa ReadInt!

 

}

 

private static int ReadInt()

{

Denna method tilldelar ett värde till private members i klass test! Inget mer!

}

 

 

}

 

Hur anropar man ReadInt från Main?

 

Tack!

 

Länk till kommentar
Dela på andra webbplatser

Jag får

 

Error 1 'Lab.Program.ReadInt()': not all code paths return a value

 

i Microsoft Visual C# när jag debuggar skripten och dessutom så funkar inte ReadInt()!

 

Innehållet i readInt har jag provat genom att lägga in det i Main och det gör vad den ska men problemet är när jag försöker använda en metod med dessa koder så kommer jag inte åt methoden verkar som!!!

 

 

Länk till kommentar
Dela på andra webbplatser

Det där felmeddelandet betyder att funktionen inte har tillräckligt med return-kommandon. Om du inte vill returnera något så måste du deklarera funktionens returvärde som void istället.

Ganska grundläggande så jag rekommenderar en tutorial i C# innan du fortsätter.

 

http://www.softsteel.co.uk/tutorials/cSharp/cIndex.html

 

 

 

[inlägget ändrat 2008-01-15 23:43:19 av Anjuna Moon]

Länk till kommentar
Dela på andra webbplatser

Methoden ska vara privat static Int!

 

Jag har provat med privat static void med men får ett felmeddelande i allafall!!

 

nu vet jag i allafall att jag anropat methoden rätt åtminstånde!!!

 

Länk till kommentar
Dela på andra webbplatser

Methoden ska vara privat static Int!

Ja, men då måste du också returnera en int, vilket den inte gör från alla ställen i funktionen. Hur ser hela funktionen ut nu?

 

Länk till kommentar
Dela på andra webbplatser

private static int ReadInt()

{

TestScores ri = new TestScores();

int klar = 0;

do

{

 

try

{

 

int inmatadtal = 0;

inmatadtal = Convert.ToInt32(Console.ReadLine());

if (ri.Score1 == 0)

{ return ri.Score1 = inmatadtal; }

else if (ri.Score2 == 0)

{ return ri.Score2 = inmatadtal; }

else if (ri.Score3 == 0)

{ return ri.Score3 = inmatadtal; }

klar = 1;

}

catch

{

Console.WriteLine("Detta är en felaktig inmatning...");

Console.ForegroundColor = ConsoleColor.Red;

Console.WriteLine("Fel! Mata in heltal!!!");

Console.ResetColor();

 

}

 

} while (klar == 0);

 

}

 

Score1, Score2 och Score3 är uppbyggda enligt följande

 

public int Score1

{

get { return _score1; }

 

set { _score1 = value; }

}

 

Länk till kommentar
Dela på andra webbplatser

Som sagt, inte allt grenar av funktionen returnerar ett värde. Lägg till en return även i slutet av funktionen:

	private static int ReadInt()
{
	TestScores ri = new TestScores();
	int klar = 0;
	do
	{

		try
		{

			int inmatadtal = 0;
			inmatadtal = Convert.ToInt32(Console.ReadLine());
			if (ri.Score1 == 0)
			{ return ri.Score1 = inmatadtal; }
			else if (ri.Score2 == 0)
			{ return ri.Score2 = inmatadtal; }
			else if (ri.Score3 == 0)
			{ return ri.Score3 = inmatadtal; }
			klar = 1;
		}
		catch
		{
			Console.WriteLine("Detta är en felaktig inmatning...");
			Console.ForegroundColor = ConsoleColor.Red;
			Console.WriteLine("Fel! Mata in heltal!!!");
			Console.ResetColor();

		}

	} while (klar == 0);
	[b]return 0;[/b]
}

 

Länk till kommentar
Dela på andra webbplatser

Nu forsvann Error grejen men funktionen har slutat tilldela värde till Score1, 2 och 3!!

 

Asså, return 0 nollställer tilldelningen av inmatadtal till Score methoden men nu vet jag i allafall var felet låg! Tack ska du ha för det!

 

Men, har du nåt förslag om hur jag ska tilldela inmatadtal till Score1,2,3 ? Kan man skriva

 

if (..........)

 

return ....

 

istället för

 

if (..........)

 

{ ............... }

 

?

 

Länk till kommentar
Dela på andra webbplatser

ri är ju ett lokalt objekt inom funktionen ReadInt, så den förstörs ju efter retur till metoden som anropade ReadInt. Deklarara istället denna i Main och skicka in den som argument till ReadInt

 

Deklarera om ReadInt

private static int ReadInt(ref TestScores ri)
{

 

och i Main

	TestScores ri = new TestScores();
ReadInt(ref ri);
}

 

[inlägget ändrat 2008-01-16 00:37:04 av Anjuna Moon]

Länk till kommentar
Dela på andra webbplatser

Noterade du att jag glömde skriva klart i deklarationen och redigerade mitt förra inlägg? Det skall alltså vara

 

private static int ReadInt(ref TestScores ri)

 

Länk till kommentar
Dela på andra webbplatser

Arkiverat

Det här ämnet är nu arkiverat och är stängt för ytterligare svar.

×
×
  • Skapa nytt...