Keresés


Toplista

Toplista
  • betöltés...

Magántanár kereső

Ha szívesen korrepetálnál, hozd létre magántanár profilodat itt.
Ha diák vagy és korrepetálásra van szükséged, akkor regisztrálj be és írd meg itt, hogy milyen tantárgyban!

C# Namespace és class

381
Sziasztok! Most kezdtem el C#-ot tanulni, teljesen kezdő vagyok. Az oktató könyvemben az elsők között volt egy feladat amit nem értettem mit miért csinál. Valaki tudna segíteni elmagyarázni?
A kód:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Elso
{
class MyClass
{
public int x;
}

class Program
{
static void Main(string[] args)
{
Elso.MyClass s = new Elso.MyClass();
s.x = 10;

Elso.MyClass p = s;
p.x = 14;

Console.WriteLine(s.x);
Console.ReadKey();
}
}
}

Először is mi az hogy 'public' int x?
Ezt nem értem egyáltalán:

Elso.MyClass s = new Elso.MyClass();
s.x = 10;

Elso.MyClass p = s;
p.x = 14;

ELŐRE IS KÖSZÖNÖM SZÉPEN <3
Jelenleg 1 felhasználó nézi ezt a kérdést.
c#, programozás
0
Felsőoktatás / Informatika

Válaszok

2
A namespace ilyen kis program esetében nem fontos, akkor van igazán szerepe, ha több modulos nagy programot csináltok többen, tele függvényekkel, és véletlenül a haverod is ugyanolyan nevű rutint csinál, mint te. Ekkor ha más namespace-ben vannak, akkor nem keverednek össze.

Egy osztályban lehetnek mindenféle adatok (member változók) és szubrutinok (függvények) is, amik ezeket az adatokat kezelik. Most a MyClass nevű osztályban egyetlen egy x nevű int típusú változó van. A public azt jelenti, hogy ezt a változót mindenki láthatja, módosíthatja, nem csak az osztály saját maga. (Most az osztályban nincsenek függvények, úgyhogy nem is lenne semmi, ami kezelhetné az x-et, muszáj public-nak lennie.)

Elso.MyClass s:
Definiál egy s nevű változót, aminek a típusa Elso.MyClass. Az Elso azt jelenti, hogy abban a namespace-ben kell a MyClass-t keresni. Mivel ez a sor is a "namespace Elso {...}" blokkban van benne, nem is kellene odaírni, elég lenne az is, hogy MyClass.

"MyClass s" tehát egy olyan változó, aminek MyClass a típusa. Kell neki értékének is lennie, az pedig a new MyClass(). Ez a new létrehoz egy MyClass típusú objektumot, az az objektum lesz az s értéke.

s.x az s-ben lévő objektum x nevű member-jét jelenti. (Nincs is neki más, de mindegy, akkor is oda kell írni.)
s.x=10: az előbb new-val allokált objektum x nevű változójának 10 lesz az értéke.

MyClass p = s: létrehoz egy p nevű változót, és értékül adja neki az s változóban lévő objektumot. Az az objektum most már az s és p változókban is benne van. (Ugyanaz az egy objektum.)
Aztán a p.x =14 értéket ad az objektum x elemének.

A "class" mellett van olyan is, hogy "struct". Az nagyon hasonló a class-hoz, de ha struct-tal lett volna a "p=s" értékadás, akkor a strukturának egy másolata készült volna, az került volna p-be. De most class volt, amiről nem lesz másolat, mindkét változó ugyanannak a class-nak a referenciáját tartalmazza.
2

Amúgy ha új nyelvet tanulsz, akkor könnyen elő fog fordulni, hogy az első kódokat nem fogod teljes egészében érteni, mivel fokozatosan lehet elmagyarázni a nyelvet.
Ez a kódrészlet ránézésre elsősorban a scope-pal foglalkozik. Hogy érsz el namespace-en belüli területet, esetleg hogyan érsz el osztályon belüli területet.
Amúgy hogy logikailag is értelme legyen. Az osztály arra jó, hogy összetartozó adatokat tárolj ott, hozzájuk tartozó függvények oda kerüljenek. Pl. van egy recepted, akkor a hozzávalókat, és azok értékét jó lenne egybe tárolni, erre jó például az osztály.
Módosítva: 5 éve
1