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

Anropa method i class!

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!

 

Dela detta inlägg


Länk till inlägg
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?

 

Dela detta inlägg


Länk till inlägg
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!

 

Dela detta inlägg


Länk till inlägg
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!!!

 

 

Dela detta inlägg


Länk till inlägg
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]

Dela detta inlägg


Länk till inlägg
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!!!

 

Dela detta inlägg


Länk till inlägg
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?

 

Dela detta inlägg


Länk till inlägg
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; }

}

 

Dela detta inlägg


Länk till inlägg
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]
}

 

Dela detta inlägg


Länk till inlägg
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 (..........)

 

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

 

?

 

Dela detta inlägg


Länk till inlägg
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]

Dela detta inlägg


Länk till inlägg
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)

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Skapa ett konto eller logga in för att kommentera

Du måste vara medlem för att kunna kommentera

Skapa ett konto

Skapa ett nytt konto på vårt forum. Det är lätt!

Registrera ett nytt konto

Logga in

Redan medlem? Logga in här.

Logga in nu



×
×
  • Skapa nytt...