C# Klasser grunder
Inledning
Med hjälp av klasser kan vi skapa egna typer. Du kan dock skapa mer avancerade typer än t.ex. heltal, decimaltal och
textsträngar.
En enkel klass kan se ut på följande sätt:
{
//variabler
public string namn;
public int points;
}
Här kommer nu ett program som utnyttjar en motsvarande klass. Här skiljer man på de av klassens
medlemmar (variabler/metoder) som är public respektive private. En medlem som är
definierad private kan bara nås av klassens egna medlemmar, alla andra (t.ex. andra klasser eller
huvudprogrammet) som försöker läsa/skriva denna medlem kommer att få kompileringsfel. En medlem
som är definierad public kan däremot läsas fritt av vilken programkod som helst.
Om vi inte skriver något så tolkas det som private (defaultläge).
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
//-------------------------------------------------------------------
//Klassdeklarationen
class Elev
{
//variabler
public string namn;
public int points;
}
//--------------------------------------------------------------------
// HUVUDPROGRAMMET
class Program
{
static void Main(string[] args)
{
Elev e1 =new Elev();
Elev e2 = new Elev();
e1.namn="Kalle"; // punktoperator för att komma åt variabler
e1.points=9;
e2.namn="Musse";
e2.points=22;
Console.WriteLine(e1.namn+"-"+e1.points);
Console.WriteLine(e2.namn+"-"+e2.points);
Console.ReadLine();
}
}
}
Det var vårt första program som visar hur vi skapar en mall för hur den nya typen Elev får se ut och sen
använder den i ett program.
För att komma åt datamedlemmar (variabler) så använder vi här punktnotation.
När man vill skriva lite säkrare program så är det farligt att låta "vem som helst" komma åt
datamedlemmarna i en klass. För att göra programmet säkert så vill man skydda dom och endast tillåta
vissa saker. Vi sätter då datamedlemmarna som private och skriver egna metoder som ligger i klassen
och dessa får påverka våra variabler på endast det sättet vi tillåter genom
dessa metoder. Detta blir ett mycket säkrare programmerande.
Här följer hela koden för ett lite utökat program:
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Klassex2
{
//--------------------------------------------------------------------
class Elev
{
// här deklareras gömda (utanför objektet) variabler och metoder som "private"
private string namn;
private int points;
// här deklareras synliga (utanför objektet) variabler och metoder som "public"
public void skriv_in_data()
{
Console.Write(" Elevnamn: ");
namn = Console.ReadLine();
Console.Write(" Poäng: ");
points = int.Parse(Console.ReadLine());
}
public void skriv_ut_data()
{
Console.WriteLine(" Elevnnamn: "+namn+" Poäng: "+points);
}
public void increase_points(int x)
{
points+=x;
}
}
//--------------------------------------------------------------------
// HUVUDPROGRAMMET klassex2
class Program
{
static void Main(string[] args)
{
Elev e1 = new Elev();
Elev e2 = new Elev(); ;
e1.skriv_ut_data(); // punktoperator för att komma åt metoder(publika)
e1.skriv_in_data();
e2.skriv_in_data();
e1.skriv_ut_data();
e2.skriv_ut_data();
e1.increase_points(10);
e1.skriv_ut_data();
Console.ReadLine();
}
}
}
OBSERVERA att vid den första utskriften av e1 så kommer defaultvärden att skrivas ut. Enda sättet att öka antalet poäng för en elev är att använda increase_points – metoden eftersom points är deklarerad "private". Vi kommer åt metoden med punktnotation. Det här är ett sätt att skapa en säkrare programmering, där ingen klåfingrig programmerare kan ändra värdet i sitt program av misstag. Genom att ha en speciell metod som gör detta är man säker på att detta bara kan ske kontrollerat. Där bör även en inmatningskontroll ske av det som matats in.
Källor