Nie działa skrócony zapis własności/właściwości.

0

Witam, pewnie znowu robię jakiś błąd którego nie widzę albo coś źle napisałem, bo jak próbuje zapisać własność w skróconej formie to mi nie działa program. Proszę o wskazówkę.

 class Time
    {
        private int Second = 60;

        public int second
        {
            get
            {
                return Second;
            }

            set
            {
                Second = value;
            }
        }

        //public int second {get; set;}
        

    }
    class Program
    {
        static void Main(string[] args)
        {
            Time present = new Time();

            Console.WriteLine("Podaj liczbę minut");
            String text = Console.ReadLine();
            int value = int.Parse(text);

            int value1 = present.second;
            double result = value1 * value;

            Console.WriteLine(value + " minut po przeliczeniu na sekundy to: \n" + result + " sekund");
            Console.Read();
        }
    }
0
class Time
{
   public int Second {get;set;}
   public Time()
   {
       Second = 60;
   }
}
0

Rozwijając odpowiedź @dam1an

Propertiesy automatyczne to takie ustrojstwo, w którym z czegoś takiego:

 public int second {get; set;}

kompilator robi coś takiego:

 
public int second
        {
            get
            {
                return drfga65ga9erg_pole_do_ktorego_nie_masz_dostepu;
            }
 
            set
            {
                drfga65ga9erg_pole_do_ktorego_nie_masz_dostepu = value;
            }
        }

tak więc Property automatyczne nie będzie miało dostępu do pola second zdefiniowanego ręcznie.

0

Zapisałem tak jak mówisz i wszystko działa, dzięki.

tak więc Property automatyczne nie będzie miało dostępu do pola second zdefiniowanego ręcznie.

Właśnie nie wiedziałem jak tą wartość 60 przekazać do własności w skróconym zapisie. Dzięki za pomoc.

0

Witam dołącze się do tematu bo mam podobny problem, a po przeczytaniu waszych wypowiedzi nadal nie rozumiem czemu dłuższa forma get; set; działa a krótsza nie oto program w Unity :

Po naciśnięciu przycisku pobieram dany komponent i ustawiam wartość danej zmiennej

public class SetPlayerVar : MonoBehaviour
{  
    public void SetGrender(string grender)
    {
        GetComponent<CreatePlayer>().Grender = grender;
    }
    
    public void SetRace(string race)
    {
        GetComponent<CreatePlayer>().Race = race;
    }   
}
 

//********************************************************************

public class CreatePlayer : MonoBehaviour
{
    string grender;
    string race;
    void ShowPlayerInfo()
    {
        print("Grender: " + grender);
        print("Race: " + race);
    }
    
    public string Grender 
    { get { return grender; } set { grender = value; } }
       public string Race{ get; set; }
} 

Przy wyświetleniu danych: pokazuje się tylko prawidłowa wartość grender, race natomiast jest pusta.
Gdy zmienie race na dłuższą formę get set wszystko działa prawidłowo
Myslałem że wyrażenia

    { get { return grender; } set { grender = value; } }
 { get; set; }

są sobie równoważne,
proszę o odpowiedz w jakim przypadku w takim razie powinienem używac krotszej formy.
dziękuję za odpowiedz

1
public class CreatePlayer : MonoBehaviour
{
    string grender;
    //string race; // to wywal
    void ShowPlayerInfo()
    {
        print("Grender: " + grender);
        print("Race: " + Race); //i tu zmień z dużej litery
    }
 
    public string Grender 
    { get { return grender; } set { grender = value; } }
       public string Race{ get; set; }
} 
0

Rozumiem, doczytałem trochę i to ma sens, ale czy da się zastosować skróconą wersje get;set; dla poniższego kodu ?

BasePlayer newPlayer = new BasePlayer(); 
    public BasePlayer NewPlayer
    {
        get{ return newPlayer;}
        set{ newPlayer = value;}
    } 

Przepraszam za pytania jeżeli wydają się trywialne, trudno mi się przestawić z C++ na C#

0

Tak jak wcześniej w tym wątku podawałem. Dajesz

public BasePlayer NewPlayer {get;set;}

I inicjujesz to w konstruktorze.

0

Właśnie nie wiedziałem jak tą wartość 60 przekazać do własności w skróconym zapisie.

W konstruktorze, tak jak kol. @dam1an pokazał.

Takie coś:

public int second { get; set; } = 60;

będzie działać dopiero w VS2015.

1 użytkowników online, w tym zalogowanych: 0, gości: 1