Poslao: 08 Sep 2017 14:30
|
offline
- dekilee125
- Novi MyCity građanin
- Pridružio: 08 Sep 2017
- Poruke: 2
|
Pre mesec dana sam počeo sa učenjem C# i eto, odmah sam zapeo i veoma mi je bitno da shvatim gde grešim, dok sam još na početku.
Uzeo sam neki primer (neka glupost sa psima) sa neta u kome se kreiraju dve klase (main i dog) . Kad u VS 2015 (ili sharpdevelop-u) obe klase ispisem u istom prozoru program funkcionise:
using System;
namespace StaticDog
{
public class Dog
{
static int dogCount;
private string name;
private int age;
public Dog(string name, int age)
{
this.name = name;
this.age = age;
Dog.dogCount += 1;
}
class Program
{
public static void Main()
{
Dog dog1 = new Dog("Jacky", 1);
Dog dog2 = new Dog("Lassy", 2);
Dog dog3 = new Dog("Rex", 3);
Console.WriteLine("Dog count is now " + Dog.dogCount);
Console.ReadKey(true);
}
}
}
}
Kad kreiram posebnu klasu Dog preko add->class dobijam grešku:
CS0122 'Dog.dogCount' is inaccessible due to its protection level StaticDog
namespace StaticDog
{
class Dog
{
// Static (class) variable
static int dogCount;
// Instanc variables
private string name;
private int age;
public Dog(string name, int age)
{
this.name = name;
this.age = age;
Dog.dogCount += 1;
}
}
}
namespace StaticDog
{
class Program
{
public static void Main()
{
Dog dog1 = new Dog("Pufi", 1);
Dog dog2 = new Dog("Lufi", 2);
Dog dog3 = new Dog("Mufi", 3);
// Access to the static variable
Console.WriteLine("Dog count is now " + Dog.dogCount);
Console.ReadKey();
}
}
}
Program u drugoj varijanti radi samo ako polje dogCont setujem kao Public.
U čemu je problem?
Pozdrav i hvala!
|
|
|
Registruj se da bi učestvovao u diskusiji. Registrovanim korisnicima se NE prikazuju reklame unutar poruka.
|
|
Poslao: 08 Sep 2017 16:41
|
offline
- E.L.I.T.E.
![Male](https://www.mycity.rs/templates/simplified/images2/user-sex.gif)
- Legendarni građanin
- Pridružio: 23 Maj 2012
- Poruke: 4575
|
Problem je u tome što je dogCount promenljiva podrazumevano definisana kao private. Iz tog razloga moraš da je definišeš kao public da bi bila vidljiva i van klase.
Citat:Class members, including nested classes and structs, can be public, protected internal, protected, internal, or private. The access level for class members and struct members, including nested classes and structs, is private by default.
Više
|
|
|
|
Poslao: 08 Sep 2017 20:04
|
offline
- vasa.93
![Male](https://www.mycity.rs/templates/simplified/images2/user-sex.gif)
- Moderator foruma
- Pridružio: 17 Dec 2007
- Poruke: 14824
- Gde živiš: Niš
|
A sve to u prvom primeru radi zbog toga što je klasa Program privatna klasa članica klase Dog (to si sa namerom uradio tako ili?).
|
|
|
|
Poslao: 08 Sep 2017 23:30
|
offline
- dekilee125
- Novi MyCity građanin
- Pridružio: 08 Sep 2017
- Poruke: 2
|
Takav je primer. Mene interesuje zašto u prvoj varijanti nema greške, a kada je urađeno po drugoj varijanti to ne funkcionise (javlja se greška), tj. da li postoji urazlika kada se klase dodaju u Solution exploreru (varijanta 2) ili kad sve klase "upisuju" u jednom prozoru (program.cs) (varijanta 1)... Mislim, pitanje je više vezano za tehniku programiranja u c#...
|
|
|
|
Poslao: 08 Sep 2017 23:35
|
offline
- vasa.93
![Male](https://www.mycity.rs/templates/simplified/images2/user-sex.gif)
- Moderator foruma
- Pridružio: 17 Dec 2007
- Poruke: 14824
- Gde živiš: Niš
|
dekilee125 ::da li postoji urazlika kada se klase dodaju u Solution exploreru (varijanta 2) ili kad sve klase "upisuju" u jednom prozoru (program.cs) (varijanta 1)... Ako se klase definišu kao dve odvojene klase, suštinski nema razlike da li je sve to smešteno u jedan ili u više različitih fajlova. Međutim, obrati pažnju na ono što sam prethodno napisao - zbog toga što je klasa Program privatna klasa članica klase Dog. Dakle, u prvom primeru klasa Program je definisana u okviru klase Dog (i samo se u okviru nje može koristiti budući da je privatna), dok je u drugom primeru klasa Program definisana u okviru namespace-a. Tu postoji razlika.
|
|
|
|