Ce este sintaxa { get; set; } în C#? (Programare, Java)

kn3l a intrebat.

Învăț ASP.NET MVC și pot citi documente în limba engleză, dar nu prea înțeleg ce se întâmplă în acest cod:

public void joinRoom(String room) throws MulticasterJoinException {
  String statusCheck = this.transmit("room", "join", room + "," + this.groupMax + "," + this.uniqueID);

  if (statusCheck != "success") {
    throw new MulticasterJoinException(statusCheck, this.PAppletRef);
  }
}

Ce înseamnă acest lucru: if (statusCheck != "success")?false, MulticasterJoinExceptionÎn general, amintiți-vă – setterii fac obiectul mutabil, o idee proastă. getterii încalcă „Spuneți unui obiect ce să facă, nu-i cereți informații și nu-l manipulați singur”. Deci, în general, nu adăugați setteri și getteri în mod implicit. Veți avea nevoie de ele, adesea, dar ar trebui să găsiți întotdeauna o nevoie reală înainte de a le adăuga. În special, setterii nu ar trebui să fie utilizați aproape niciodată în codul de producție (căutați imutabilitatea ori de câte ori este posibil, iar atunci când este nevoie de mutație, ar trebui să-i cereți să mute pentru dumneavoastră, nu să setați o valoare). – 

Bill K

Comentarii

  • Doar pentru a adăuga ceva… Dacă nu puneți creați un > Por Field. dar dacă puneți
  • creați un câmp proprietate. Existența unei proprietăți ar putea ușura unele lucruri, în special atunci când se lucrează cu Reflection. –  > Por Seichi.
  • @Seichi folosirea unui get-setter creează și ea un Field, dar acesta este ascuns, declarat ca fiind privat și modificat de proprietățile auto-create; toate acestea realizate de compilator. –  > Por Jonathan Ramos.
  • proprietățile auto nu sunt înfrângerea scopului > Por private. câmpurilor private? – 
  • mireazma

  • String > Por . 18 Răspunsuri

Klaus Byskov Pedersen

7 răspunsuri

Este o așa-numită proprietate automată și este, în esență, o prescurtare pentru ceea ce urmează (un cod similar va fi generat de compilator):

if (!"success".equals(statusCheck))

99

Klaus, puteți explica ce se va întâmpla cu acest cod? Ar putea beneficia de o explicație mai amănunțită. – 

Comentarii

    TylerH

  • > Por .Deci, doar pentru a fi sigur: este ca și cum aș supraîncărca
  • operator, dar numai pentru un anumit element, corect? –  > Por Hi-Angel.

De ce avem nevoie de var privat :-/ păcat. – 

Oliver Dixon

@TylerH Motivul pentru variabila privată este încapsularea, get/set oferă o „poartă” pentru a obține sau seta variabila. Deși există multe motive pentru a nu folosi get/setters deoarece „poarta” poate rupe încapsularea variabilei private. (aceasta nu ar trebui să fie accesibilă) – ==Alexander!=S-ar putea să fie evident, dar vreau să clarific faptul că prescurtarea nu este Stringliteralmente o prescurtare pentru asta. Adică, nu există o variabilă privată

este creată. Dacă ați încerca să faceți referire la această variabilă privată în cadrul clasei, nu veți reuși. Nu sunt sigur cum procedează C#, dar se comportă ca și cum ar exista o variabilă privată fără nume, pe care nu o puteți accesa în cod. – !"success".equals(statusCheck)Denziloe

Comentarii

    Josie Thompson

  • > Por .Deci, după cum am înțeles

este o „proprietate automată” care, așa cum au spus @Klaus și @Brandon, este o prescurtare pentru a scrie o proprietate cu un „câmp de suport”. Deci, în acest caz:

Cu toate acestea, dacă sunteți ca mine – cu aproximativ o oră sau cam așa ceva – nu prea înțelegeți ce înseamnă „proprietate”. equalsproprietăți

if ("success" != statusCheck.intern())
 și 

accesoriile și nici nu aveți cea mai bună înțelegere a unor terminologii de bază. MSDN este un instrument grozav pentru a învăța astfel de lucruri, dar nu este întotdeauna ușor de înțeles pentru începători. Așa că voi încerca să explic mai în profunzime acest lucru aici.

Comentarii

  • și > Por . sunt
  • accesori > Por ., ceea ce înseamnă că sunt capabili să acceseze date și informații din
  • private

  • private (de obicei, dintr-un câmp câmp suport) și, de obicei, fac acest lucru din > Por public.
  • proprietățiintern() (după cum puteți vedea în exemplul de mai sus). > Por .Nu se poate nega faptul că afirmația de mai sus este destul de confuză, așa că haideți să trecem la câteva exemple. Să spunem că acest cod se referă la genuri de muzică. Așadar, în cadrul clasei Genre, vom dori diferite genuri de muzică. Să spunem că vrem să avem 3 genuri: Hip Hop, Rock și Country. Pentru a face acest lucru, vom folosi numele clasei
  • Clasa

pentru a crea un nou

instanțe

ale acelei clase.

   if(!statusCheck.equals("success"))
    {
        //do something
    }

      or

    if(!"success".equals(statusCheck))
    {
        //do something
    }
Acum, după ce am creat instanțele clasei Genre, putem seta numele genurilor folosind opțiunea "Name". 

Comentarii

  • care a fost setată mai sus. > Por .
  • Putem seta numele lui „g1” la Hip Hop scriind următorul lucrustatusCheck==null, Ceea ce se întâmplă aici este destul de complex. După cum am spus mai devreme, > Por . și

accesează informații din câmpuri private pe care altfel nu le-ai putea accesa.

poate doar

să citească

informații din acel câmp privat și să le returneze. !statusCheck.equals("success") poate doar !=scrie informații în acel câmp privat. Dar, dacă o proprietate are atât

și suntem capabili să facem ambele funcții. Și prin scrierea

folosim în mod specific

Comentarii

  • din proprietatea Namenullable folosește o variabilă implicită numită equals(Object). Practic, ceea ce înseamnă că de fiecare dată când vedeți „valoare” în cadrul !"success".equals(statusCheck)se referă la o variabilă; variabila „value”. Când scriem statusCheck == null folosim variabila > Por . pentru a trece în

care în acest caz este

. Deci, în esență, vă puteți gândi la asta în felul următor:

equals()Este important de reținut că exemplul de mai sus nu este de fapt scris în cod. Este mai mult un cod ipotetic care reprezintă ceea ce se întâmplă în fundal.

if (!statusCheck.equals("success")) {
Așadar, acum că am 

setat

numele instanței g1 de la

Comentarii

    Genre

  • cred că putem > Por obține. numele scriind
  • !"success".equals(statusCheck)și dacă am executa acest lucru am obține NullPointerException în consola noastră. > Por
    .

Tags: