У чым розніца паміж зменнымі асобнікамі і пераменнымі класа ў C #?


адказ 1:

Вы не задавалі правільных пытанняў, але я думаю, я ведаю, што вы пытаецеся.

Пераменная экзэмпляра - гэта зменная, якую неабходна выкарыстаць перад выкарыстаннем. Добра, гэта, напэўна, не вельмі дапамагло, бо вы, несумненна, чулі гэта раней. Вось прыклад таго, што гэта значыць.

Дапусцім, вы стварылі клас (C #, але гэта таксама адносіцца і да VB і іншых), і ў гэтым класе ёсць шэраг пераменных, адна з якіх - сцяг, які паказвае, калі бензабака запоўнена. Каб атрымаць доступ да гэтай зменнай, вы павінны стварыць асобнік класа.

бензабак грамадскага класа {

private int _amountOfGas = 0;

прыватны bool _flagFullTank = false;

прыватны bool _flagEmptyTank = true;

грамадскі GasTank = новы GasTank () {}

грамадскі FillTank () {

у той час (! _ flagFullTank) {

_amountOfGas ++;

}}

}}

public int AmountOfGas {

get {return _amountOfGas;}

ўсталяваць {_amountOfGas = значэнне;}

}}

}}

Для адлюстравання значэння _amountOfGas неабходна стварыць асобнік класа.

GasTank MyGasTank = новы GasTank ();

З MyGasTank вы зможаце ўбачыць значэнне, якое вы шукаеце.

int GasLeft = MyGasTank.AmountOfGas;

Добра, гэта вельмі проста і проста ў галаве, так што гэта не поўны код. Я таксама зрабіў крыху больш, чым мне трэба, каб стварыць схаваныя ці прыватныя зменныя і агульнадаступныя ўласцівасці. Мы абнаўляем прыватныя зменныя ў класе (пры неабходнасці), але толькі доступ да іх праз уласцівасці. Гэта абсалютна неабходна? Не Калі вы робіце прыватныя часткі класа агульнадаступнымі, вы можаце атрымаць доступ да ўсіх частак праз MyGasTank.

Цяпер, калі вы ствараеце клас са статычнымі пераменнымі, скажыце, утыліта-клас, які змяшчае некалькі выдатных функцый, якія вы можаце выкарыстоўваць у сваім кодзе. Калі функцыі і зменныя былі вызначаны наступным чынам:

грамадскі статычны бул ValidUser;

Затым вы можаце патэлефанаваць гэтай зменнай у кодзе з дапамогай Utility.ValidUser і атрымаць значэнне (праўдзівае ці непраўдзівае).

Гэта асноўныя моманты, але ёсць (і павінны) больш спосабаў стварэння класа. У наступным прыкладзе няма неабходнасці ствараць клас утыліты (г.зн. Utility MyUtility = new Utility (). Пакуль усе рэчы, да якіх вы хочаце атрымаць доступ, статычна вызначаныя, вы можаце проста выкарыстоўваць іх).

Спадзяюся, што гэта дапамагае.


адказ 2:

Для зменных на C ёсць чатыры тыпы вобласці:

глабальны - да якога можна звярнуцца з любой функцыяй або модулем. Яны абвешчаны без дадатковых абмежаванняў плошчы, якія адзначаны "Int a"; былі дададзены. Яны дэкларуюцца па-за функцыяй і таму з'яўляюцца глабальнымі.

статычны "глабальны" - Гэта глабальная зменная, да якой звяртаецца любая функцыя, якая вынікае ў аб'яве "МОДУЛЬ" (файл). "Static int a;" абвешчаны па-за функцыяй, вызначаны для выкарыстання ў модулі (файл C). Гэта непасрэдна даступна па-за межамі модуля, хоць функцыя ўнутры модуля можа вярнуць паказальнік на зменную.

Мясцовы - да якога можна атрымаць доступ толькі ў тым блоку, у якім ён абвешчаны. Гэтыя зменныя знаходзяцца ў стэку і становяцца часткай кадра стэка, калі выклікаюцца іншыя функцыі. Паказальнікі на гэтыя зменныя ТОЛЬКІ могуць быць перададзены функцыям, выкліканым блокам, у якім яны аб'яўлены. Калі функцыя вяртае адрас, гэта ўразлівасць партыі.

static local - Гэта пераменныя, якія больш абмежавальныя, чым статычныя "глабальныя", таму што сфера дзеяння імя абмежаваная блокам, у якім абвешчана зменная. УВАГА: Значэнне, якое змяшчаецца ў гэтай зменнай, перадаецца і даступна блоку для далейшага выкарыстання. Гэтых зменных няма ў стэку, таму паказальнікі на іх можна вярнуць.