'ස්ථිතික කියවීමට පමණක්' එදිරිව.


1399

මම constසහ කියවා ඇත්තෙමිstatic readonly ක්ෂේත්‍ර . නියත අගයන් පමණක් අඩංගු සමහර පන්ති අප සතුව ඇත. ඒවා අපගේ පද්ධතියේ විවිධ දේ සඳහා භාවිතා වේ. එබැවින් මගේ නිරීක්ෂණය නිවැරදි දැයි මම කල්පනා කරමි:

මේ ආකාරයේ නියත අගයන් සැමවිටම static readonlyපොදු වන සෑම දෙයක් සඳහාම තිබිය යුතුද ? constඅභ්‍යන්තර / ආරක්ෂිත / පෞද්ගලික අගයන් සඳහා පමණක් භාවිතා කරන්න ?

ඔබ නිර්දේශ කරන්නේ මොනවාද? මම සමහර විට static readonlyක්ෂේත්‍ර භාවිතා නොකර, දේපල භාවිතා කළ යුතුද?


5
මෙන්න මම දැන් වාසිදායක ලෙස සොයාගත් ඉතා සිත්ගන්නා තනි නඩුවකි static readonly: සොයාගත නොහැකි දෙයක් අවුලුවන කොන්ස්ට් එකක් තුළ කොන්ස්ට් එකක් භාවිතා කිරීමට උත්සාහ කරන්න , එවිට ඔබට භයානක "අභ්‍යන්තර සම්පාදක දෝෂයක්" ලැබෙනු ඇතIEnumerator yield . මම යුනිටි 3 ඩී වලින් පිටත කේතය පරීක්‍ෂා නොකළ නමුත් මෙය මොනෝ හෝ .නෙට් දෝෂයක් යැයි මම විශ්වාස කරමි . කෙසේ වෙතත් එය c # ප්‍රශ්නයකි.
cregox


8
තවත් වෙනසක් නම්, ඔබට ස්විචයක
කොන්ස්ට්

7
static readonlyswitch-caseප්‍රකාශය caseවිචල්‍ය ලෙස භාවිතා කළ නොහැක , constමේ සඳහා අවශ්‍ය වේ.
මොස්ටාෆිස් රහ්මාන්

3
static readonlyආරෝපණ පරාමිතිය ලෙසද භාවිතා කළ නොහැක
ඩ්‍රෙඩ් බෝයි

Answers:


946

public static readonlyක්ෂේත්ර ටිකක් අසාමාන්ය ය; public staticගුණාංග (අ සමඟ පමණක් get) වඩාත් සුලභ වනු ඇත (සමහර විට private static readonlyක්ෂේත්‍රයක පිටුබලය ඇත ).

constඅගයන් ඇමතුම් අඩවියට කෙලින්ම පුළුස්සා දමනු ලැබේ; මෙය ද්විත්ව දාර:

  • ක්‍රියාකාරී වේලාවේදී අගය ලබා ගන්නේ නම් එය නිෂ් less ල ය
  • ඔබ කොන්ස්ට් එකක වටිනාකම වෙනස් කරන්නේ නම්, ඔබ සියලු සේවාදායකයින් නැවත ගොඩනඟා ගත යුතුය
  • නමුත් එය වේගවත් විය හැකිය, මන්ද එය ක්‍රම ඇමතුමක් මග හැරේ ...
  • ... සමහර විට එය කෙසේ හෝ JIT විසින් යොමු කර ඇත

අගය කිසි විටෙකත් වෙනස් නොවන්නේ නම් , කොන්ස් හොඳයි - Zeroයනාදිය සාධාරණ සංයුක්තයන් සාදයි; p ඒ හැර, staticගුණාංග වඩාත් පොදු වේ.


13
ක්ෂේත්‍රයක් පුරා දේපලක් වන්නේ ඇයි? එය වෙනස් කළ නොහැකි පංතියක් නම්, මට කිසිදු වෙනසක් නොපෙනේ.
මයිකල් හෙඩ්ග්පෙත්

73
Ic මයිකල් - සෑම විටම එකම හේතු; එය ක්‍රියාත්මක කිරීම සඟවයි. ඔබට කම්මැලි පැටවීම, වින්‍යාසය පදනම් කරගත්, මුහුණත හෝ වෙනත් ඕනෑම දෙයක් අවශ්‍ය බව ඔබට (පසුව) සොයාගත හැකිය. යථාර්ථය නම්, එක්කෝ බොහෝ විට හොඳ වනු ඇත ...
මාක් ග්‍රෙවෙල්

43
DefinitionCoffeeAdict අර්ථ දැක්වීම අනුව, නියතයක් යනු වින්‍යාස ගොනුවකින් අගයන් අදින්නේ නැත ; එය සම්පාදනය කරන වේලාවේ වචනාර්ථයෙන් පුළුස්සා දමනු ලැබේ. ධාවන වේලාවේදී නියතයක් භාවිතා කළ හැකි එකම ක්‍රමය වන්නේ ක්ෂේත්‍ර හරහා පරාවර්තනය කිරීමයි. ඔබ එය භාවිතා කිරීමට උත්සාහ කරන වෙනත් ඕනෑම වේලාවක, සම්පාදකයා දැනටමත් ඔබේ නිරන්තර භාවිතය වචනානුසාරයෙන් භාවිතා කර ඇත; එනම්, ඔබේ කේතයේ ක්‍රමයක් නියත 6 ක් භාවිතා කරයි නම් සහ ඔබ එය අයිඑල් ලෙස පරීක්ෂා කරන්නේ නම්, නිරන්තර සොයා බැලීම් ගැන සඳහනක් නොමැත; සාහිත්යමය වටිනාකම් හුදෙක් ඇඳුම් තුළ පිහිටි ප්රවේශනය කෙරේ
මාක් Gravell

38
C මාක්ග්‍රැවෙල් - අවවාදයයි: readonlyස්විච් / කේස් ප්‍රකාශ වලදී ක්ෂේත්‍ර භාවිතා කළ නොහැක, ඒ වෙනුවට ඔබට ඒවා අවශ්‍ය වේ const.
ලුසියානෝ

7
id ඩිඩිබස් දේපලකට ක්ෂේත්‍රයක් වෙනස් කිරීම ඇත්ත වශයෙන්ම API බිඳ දමයි. C # හි ක්ෂේත්‍රයක් විචල්‍යයක් ලෙස ක්‍රියා කරන අතර C # හි ඇති දේපලක් ලබා ගැනීමේ ක්‍රමයක් සහ / හෝ සැකසුම් ක්‍රමයක් ලිවීම සඳහා සින්ටැක්ස් සහායක වේ. වෙනත් එක්රැස්වීම් සම්බන්ධ වන විට මෙම වෙනස වැදගත් වේ. ඔබ ක්ෂේත්‍රයක් දේපලකට වෙනස් කරන්නේ නම් සහ වෙනත් එකලස් කිරීම් මෙම ක්ෂේත්‍රය මත රඳා පවතී නම්, එම එකලස් කිරීම් නැවත සකස් කළ යුතුය.
ස්ටීවන් බූහර්

241

පාරිභෝගිකයා වෙනත් එකලස් කිරීමක සිටී static readonlyනම් මම භාවිතා කරමි . සහිත හා පාරිභෝගික විවිධ එක්රැස්වීම් දෙකක් ලස්සන ක්රමයක් වන පාදයේ ඔබ වෙඩි තියන්න .const


5
එබැවින් සමහරු සඳහන් කර ඇති හෝ සඳහන් කර ඇති පරිදි, සැබවින්ම ප්‍රසිද්ධ නියතයන් වන අගයන් ප්‍රසිද්ධියට පත් කළ හොත් ඒවා අභ්‍යන්තර, ආරක්‍ෂිත හෝ පෞද්ගලික ප්‍රවේශ විෂය පථයන් සඳහා වෙන් කළ යුතුය.
jpierson

1
@ ඩියෝ එය තවමත් පැවතීමට හේතුව එය ගැටළුවක් නොවන බැවිනි - එය දැනුවත් විය යුතු දෙයකි, නමුත් එකලස් කිරීමේ සීමාවන් හරහා පේළිගත කිරීමේ හැකියාව කාර්ය සාධනය සඳහා හොඳ දෙයකි. “නියත” යන්නෙහි තේරුම “එය කිසි විටෙකත් වෙනස් නොවන” බව සැබවින්ම වටහා ගත යුතු කරුණකි.
මයිකල් ස්ටම්

1
Ic මයිකල්ස්ටම් හරි මම එය "ප්‍රශ්නයක්" ලෙස නොකියමි. මගේ වැඩ කටයුතු වලදී, මට එකලස් කර ඇති අතර එය එකලස් කර බෙදාගෙන ඇත, නමුත් එක් එක් යෙදවීම හෝ කේත නැව්ගත කිරීම සඳහා මම නැවත සකස් කරමි. එසේ වුවද, මෙම කරුණ නිසැකවම සැලකිල්ලට ගැනීම වටී.
ඩියෝ ෆුන්ග්

1
එබැවින්, පොදුවේ, internal constහෝ public static readonlyඅපේක්ෂිත දෘශ්යතාව මත පදනම්ව.
ඉරිඩේන්

2
IrIiridayn ඔව්, එය දෙස බැලීමේ නරක ක්‍රමයක් නොවේ. සලකා බැලිය යුතු අවස්ථා කිහිපයක් තිබේ (උදා: පරාවර්තනය භාවිතා කරන්නේ නම්, හෝ ලක්ෂණයක් සඳහා වටිනාකමක් අවශ්‍ය නම්), සහ වලංගු භාවිතයන් ඇත public const(උදා: සම්මතයක ඕනෑම දෙයක්. පොකුරු පොකුරක් සහිත නාම අවකාශ ගොනුව public const string.) නමුත් පොදුවේ, භාවිතා public constකළ යුත්තේ ඇඟවුම් නිසි ලෙස සලකා බැලීමෙන් පසුව පමණි.
මයිකල් ස්ටම්

202

සැලකිල්ලට ගත යුතු තවත් අදාළ කරුණු කිහිපයක්:

const int a

  • ආරම්භ කළ යුතුය.
  • ආරම්භ කිරීම සම්පාදනය කරන වේලාවේ විය යුතුය .

readonly int a

  • ආරම්භ නොකර, පෙරනිමි අගයක් භාවිතා කළ හැකිය.
  • ආරම්භක වේලාව ධාවන වේලාවේදී කළ හැකිය (සංස්කරණය කරන්න: ඉදිකිරීම්කරු තුළ පමණි).

39
ctorඑකම ඇතුළත .
අමිත් කුමාර් ගොෂ්

1
ඉදිකිරීම්කරු තුළ පමණක් නොව ප්‍රකාශනයේ ද ( docs.microsoft.com/en-us/dotnet/csharp/language-reference/… ).
ඩික්‍රිස්ටෝ

179

මෙය අනෙක් පිළිතුරු සඳහා අතිරේකයක් පමණි. මම ඒවා නැවත නොකරමි (දැන් අවුරුදු හතරකට පසුව).

constසහ නියත නොවන විවිධ අර්ථකථන ඇති අවස්ථා තිබේ. උදාහරණයක් වශයෙන්:

const int y = 42;

static void Main()
{
  short x = 42;
  Console.WriteLine(x.Equals(y));
}

මුද්‍රණය කරයි True, නමුත්:

static readonly int y = 42;

static void Main()
{
  short x = 42;
  Console.WriteLine(x.Equals(y));
}

ලියයි False.

හේතුව, ක්‍රමයට x.Equalsඅධි බර දෙකක් ඇති අතර, එකක් short( System.Int16) සහ තවත් එකක් object( System.Object) ගනී . දැන් ප්‍රශ්නය වන්නේ මගේ yතර්කය සමඟ එකක් හෝ දෙකම අදාළ වේද යන්නයි .

විට yඑය ඇති බැදීමකට-කාල නියතය (ප්රායෝගික), යනු const, ඔහු ඒ ගම්ය පරිවර්තනය පවතින බව වැදගත් බවට පත් වෙයි සිට int කිරීමට short බව ලබා intනියත වන අතර, එහි වටිනාකම වන පරාසය තුළ බව සී # සම්පාදක සත්යතාවය බව ලබා short( වන 42) වේ. C # භාෂා පිරිවිතරයේ ව්‍යංග නියත ප්‍රකාශන පරිවර්තනය බලන්න . එබැවින් අධි බර පැටවීම දෙකම සලකා බැලිය යුතුය. වැඩිපුර පැටවීම Equals(short)වඩාත් සුදුසුය (ඕනෑම shortඑකක් object, නමුත් සියල්ලම objectනොවේ short). එබැවින් yපරිවර්තනය කර ඇති අතර short, එම අධික බර භාවිතා වේ. ඉන්පසු Equalsසමාන අගයන් දෙකක් සංසන්දනය කරන shortඅතර එය ලබා දෙයි true.

විට yනියත නොවේ, කිසිදු ගම්ය බවට පරිවර්තනය intකිරීමට shortපවතී. එයට හේතුව පොදුවේ ගත් intකල a ට සරිලන තරම් විශාල විය හැකි shortබැවිනි. ( පැහැදිලි පරිවර්තනයක් පවතී, නමුත් මම නොකියමි Equals((short)y), එබැවින් එය අදාළ නොවේ.) අපට පෙනෙන්නේ එක් අධි බරක් පමණක් අදාළ වන බවයි Equals(object). එසේ yකොටු කර objectඇත. එවිට Equalsa සමඟ සංසන්දනය System.Int16කිරීමට යන අතර System.Int32, ධාවන කාල වර්ග පවා එකඟ නොවන බැවින් එය ලැබෙනු ඇත false.

සමහර (දුර්ලභ) අවස්ථාවන්හිදී, constවර්ගයේ සාමාජිකයෙකු static readonlyක්ෂේත්‍රයකට වෙනස් කිරීම (හෝ වෙනත් ආකාරයකින්, හැකි විට) වැඩසටහනේ හැසිරීම වෙනස් කළ හැකි බව අපි නිගමනය කරමු .


17
පිළිගත් පිළිතුරට හොඳ එකතු කිරීමක්. දත්ත වර්ග සහ වෙනත් සමාන මාර්ගෝපදේශ නිසි ලෙස පරිවර්තනය කිරීම (ට්‍රයිච් කැච් වැනි) පළපුරුදු ක්‍රමලේඛකයින්ගේ ප්‍රධාන ආහාරයක් විය යුතු අතර එය සම්පාදකයාට ඉතිරි නොවේ. එසේ වුවද, මම මෙතැන් සිට අලුත් දෙයක් ඉගෙන ගතිමි. ඔබට ස්තුතියි.
උක්නයිට්

ඇවැත්නි, මම දීර් # කාලයක් තිස්සේ සී # හි ක්‍රමලේඛනය කර ඇති අතර කෙටි පරාසයක් තුළ සංයුක්ත සංඛ්‍යාවක් කෙටි ලෙස පරිවර්තනය කළ හැකි යැයි මම කිසි විටෙකත් අනුමාන නොකරමි. මම කියන්න ඕන ඒක අමුතුයි. මම C # ට ආදරෙයි, නමුත් මෙම අමුතු නොගැලපීම් වැඩි වටිනාකමක් එක් නොකරන නමුත් නිරන්තරයෙන් සලකා බැලීමට අවශ්‍ය මොළ ශක්තිය එකතු කිරීම කරදරයක් විය හැකිය, විශේෂයෙන් ආරම්භකයින්ට.
මයික් මේරිනොව්ස්කි

Ike මයික්මරිනොව්ස්කි ඇත්ත. නමුත් මම හිතන්නේ ඔවුන් එම රීතිය (වෙනත් හේතු අතර) ප්‍රකාශය short x = 42;නීත්‍යානුකූල කිරීමට. එහි ඔබ සතුව ඇති int, එනම් වචනානුසාරයෙන් 42, එය ව්‍යංගයෙන් හැරී ඇත short x. එහෙත්, එසේ නම්, ඔවුන් මෙය සංඛ්‍යාත්මක වචනාර්ථයට පමණක් සීමා වන්නට ඇත; කෙසේ වෙතත්, ඔවුන් අර්ථ දක්වා ඇති short x = y;තැන වැනි දේවලට ඉඩ දීමට තෝරා ගත් අතර පසුව ඔවුන් මේ සමඟ අවසන් විය. yconst int y = 42;
ජෙප් ස්ටිග් නීල්සන්

89

සැලකිල්ලට ගත යුතු එක් දෙයක් වන්නේ const යනු ප්‍රාථමික / අගය වර්ග වලට සීමා වීමයි (ව්‍යතිරේකය නූල්).


30
ඇත්ත වශයෙන්ම constඑය වෙනත් වර්ග සඳහාද භාවිතා කළ හැකිය, එය ශුන්‍ය කිරීමට ආරම්භ කළ යුතු අතර එය
නිෂ් less ල

6
ව්‍යතිරේකය මෙන් System.Exception? :)
මෙමෙට් ඔල්සන්

4
@nawfal තවත් හරියටම, එකම වර්ගයේ වටිනාකම සඳහා constභාවිතා කළ හැකි, කරන sbyte, byte, short, ushort, int, uint, long, ulong, char, float, double, decimal, bool, වන ඕනෑම enumවර්ග. constවැනි, අනෙකුත් අගය වර්ග සඳහා භාවිතා කළ නොහැක DateTimeහෝ TimeSpanහෝ BigInteger. එය IntPtrව්‍යුහය සඳහා ද භාවිතා කළ නොහැක (සමහරුන් විසින් "ප්‍රාථමික" වර්ගයක් ලෙස සලකනු ලැබේ; ප්‍රාථමික වර්ගය යන පදය C # හි ව්‍යාකූල වේ). Reference constසියලුම යොමු වර්ග සඳහා මෙය භාවිතා කළ හැකිය . වර්ගය නම් string, ඕනෑම නූල් අගයක් නියම කළ හැකිය. එසේ නොමැති නම් වටිනාකම විය යුතුය null.
ජෙප් ස්ටිග් නීල්සන්

Ep ජෙප්ස්ටිග්නිල්සන් - මෑතකදී මට සර්වි සමඟ වාදයක් ඇති විය - ඔහු පෙන්වා දුන්නේ ඔබට ඕනෑම දෙයක් (වටිනාකම් සහ විමර්ශන වර්ග) constභාවිතා කළ හැකි defaultබවයි. සඳහා structවර්ග, එය පෙරනිමි අගයන් සකසා එහි සියලු සාමාජිකයන් සමඟ නිදසුනක් වේ.
වයි හ ලී

29

ස්ථිතික කියවීමට පමණි :

staticධාවන වේලාවේදී ඉදිකිරීම්කරුවෙකු හරහා අගය වෙනස් කළ හැකිය . නමුත් සාමාජික ශ්‍රිතයක් හරහා නොවේ.

නියත :

පෙරනිමියෙන් static. වටිනාකමක් ඕනෑම තැනකින් වෙනස් කළ නොහැක (ඉදිකිරීම්කරු, ක්‍රියාකාරීත්වය, ධාවන කාලය යනාදිය කොතැනකවත් නැත).

කියවීමට පමණි :

ධාවන වේලාවේදී ඉදිකිරීම්කරුවෙකු හරහා අගය වෙනස් කළ හැකිය. නමුත් සාමාජික ශ්‍රිතයක් හරහා නොවේ.

ඔබට මගේ ගබඩාව දෙස බැලිය හැකිය: C # දේපල වර්ග .


1
නරක ආරංචියක් ... බිඳුණු සබැඳිය!
ෆර් ආර්


හොඳ ස්නිපෙට් සියම් ভাই :)
මුහම්මද් අෂිකුස්සමාන්

25

මෙම readonlyඉඟි පද වලින් වෙනස් constමූල පදය. ඒ constක්ෂේත්රයේ පමණක් ක්ෂේත්ර ප්රකාශයට පත් වන ආරම්භනය කල හැක. ඒ readonlyකෙත ප්රකාශ දී හෝ ඉදිකිරීමටත් එක්කෝ ආරම්භනය කල හැක. එබැවින්, readonlyභාවිතා කරන ඉදිකිරීම්කරු මත පදනම්ව ක්ෂේත්‍රයන්ට විවිධ අගයන් තිබිය හැකිය. එසේම, constක්ෂේත්‍රයක් සම්පාදක කාල නියතයක් වන අතර, readonlyක්ෂේත්‍රය ධාවන කාල නියතයන් සඳහා භාවිතා කළ හැකිය

කෙටි හා පැහැදිලි MSDN යොමුව මෙහි


16

constහා readonlyසමාන වේ, නමුත් ඔවුන් හරියටම එම නැත.

constක්ෂේත්රය, වටිනාකම සම්පාදනය කාලීන ගණනය කළ හැකි බව, එහි තේරුම බැදීමකට-කාල නියතය වේ. ඒ readonlyක්ෂේත්රයේ යම් කේතය වර්ගය ඉදි තුළ ක්රියාත්මක කළ යුතු අතිරේක අවස්ථාවන්හීදී හැකියාව ලබා දෙයි. ඉදිකිරීමෙන් පසු readonlyක්ෂේත්‍රයක් වෙනස් කළ නොහැක.

උදාහරණයක් ලෙස, constසාමාජිකයන් වැනි සාමාජිකයින් අර්ථ දැක්වීමට භාවිතා කළ හැකිය:

struct Test
{
    public const double Pi = 3.14;
    public const int Zero = 0;
}

3.14 සහ 0 වැනි අගයන් සම්පාදක කාල නියතයන් බැවින්. කෙසේ වෙතත්, ඔබ වර්ගයක් නිර්වචනය කර එහි පූර්ව-ෆැබ් අවස්ථා කිහිපයක් සැපයීමට අවශ්‍ය අවස්ථාව සලකා බලන්න. උදා: ඔබට වර්ණ පංතියක් නිර්වචනය කර කළු, සුදු වැනි පොදු වර්ණ සඳහා “නියතයන්” සැපයීමට අවශ්‍ය විය හැකිය. දකුණු පැත්තේ සම්පාදක කාල නියතයන් නොවන බැවින් නියත සාමාජිකයන් සමඟ මෙය කළ නොහැක. සාමාන්‍ය ස්ථිතික සාමාජිකයන් සමඟ කෙනෙකුට මෙය කළ හැකිය:

public class Color
{
    public static Color Black = new Color(0, 0, 0);
    public static Color White = new Color(255, 255, 255);
    public static Color Red   = new Color(255, 0, 0);
    public static Color Green = new Color(0, 255, 0);
    public static Color Blue  = new Color(0, 0, 255);
    private byte red, green, blue;

    public Color(byte r, byte g, byte b) => (red, green, blue) = (r, g, b);
}

නමුත් කළු හා සුදු අගයන් හුවමාරු කර ගැනීමෙන් වර්ණ සේවාදායකයකු සමඟ නොගැලපීමට කිසිවක් නැත. මෙය වර්ණ පන්තියේ අනෙකුත් සේවාදායකයින්ට ව්‍යාකූලත්වයක් ඇති කරන බව අමුතුවෙන් කිව යුතු නැත. "කියවීමට පමණක්" විශේෂාංගය මෙම තත්වය ආමන්ත්‍රණය කරයි.

readonlyප්‍රකාශනවල මූලික පදය සරලව හඳුන්වා දීමෙන්, සේවාදායක කේතය අවහිර කිරීමෙන් වලක්වන අතරම නම්‍යශීලී ආරම්භය අපි ආරක්ෂා කරමු.

public class Color
{
    public static readonly Color Black = new Color(0, 0, 0);
    public static readonly Color White = new Color(255, 255, 255);
    public static readonly Color Red   = new Color(255, 0, 0);
    public static readonly Color Green = new Color(0, 255, 0);
    public static readonly Color Blue  = new Color(0, 0, 255);
    private byte red, green, blue;

    public Color(byte r, byte g, byte b) => (red, green, blue) = (r, g, b);
}

සංයුක්ත සාමාජිකයන් සැමවිටම ස්ථිතික වන අතර කියවිය හැකි සාමාජිකයෙකු සාමාන්‍ය ක්ෂේත්‍රයක් මෙන් ස්ථිතික හෝ නොවිය හැකිය.

මෙම අරමුණු දෙක සඳහා තනි මූල පදයක් භාවිතා කළ හැකි නමුත් මෙය අනුවාදකරණ ගැටළු හෝ කාර්ය සාධන ගැටළු වලට මග පාදයි. අපි මේ සඳහා තනි මූල පදයක් භාවිතා කළ බව මොහොතකට උපකල්පනය කරන්න, සහ සංවර්ධකයෙකු මෙසේ ලිවීය:

public class A
{
    public static const C = 0;
}

වෙනත් සංවර්ධකයෙක් ඒ මත යැපෙන කේතයක් ලිවීය:

public class B
{
    static void Main() => Console.WriteLine(A.C);
}

දැන්, ජනනය කරන ලද කේතයට ප්‍රත්‍යාවර්ත ධාරා සංයුක්ත කාල නියතය යන කාරණය මත රඳා පැවතිය හැකිද? එනම්, AC භාවිතය හුදෙක් 0 අගය මගින් ප්‍රතිස්ථාපනය කළ හැකිද? ඔබ මේ සඳහා "ඔව්" යැයි පැවසුවහොත්, එයින් අදහස් වන්නේ A හි සංවර්ධකයාට AC ආරම්භ කරන ආකාරය වෙනස් කළ නොහැකි බවයි - මෙය අවසරයකින් තොරව A හි සංවර්ධකයාගේ දෑත් බැඳ තබයි.

ඔබ මෙම ප්‍රශ්නයට "එපා" යැයි පැවසුවහොත් වැදගත් ප්‍රශස්තිකරණයක් මග හැරේ. සමහර විට A හි කතුවරයා ධනාත්මක වන්නේ AC සෑම විටම ශුන්‍ය වනු ඇති බවයි. සංයුක්ත හා කියවීමට පමණක් භාවිතා කිරීම මඟින් A හි සංවර්ධකයාට අභිප්‍රාය නියම කිරීමට ඉඩ ලබා දේ. මෙය වඩා හොඳ අනුවාද හැසිරීමක් සහ වඩා හොඳ කාර්ය සාධනයක් ඇති කරයි.


12

මගේ මනාපය වන්නේ const භාවිතා කිරීමයි මට හැකි සෑම විටම , එය පෙර පිළිතුරු වල සඳහන් කළ පරිදි වචනාර්ථයෙන් ප්‍රකාශනයට හෝ ඇගයීමට අවශ්‍ය නොවන දෙයකට සීමා වේ.

මම එම සීමාවට එරෙහිව පහර දුන්නොත්, මම එක අවවාදයකින් ස්ථිතික කියවීමට පමණක් පසුබට වෙමි . මාක් මෙහි සඳහන් කර ඇති පරිදි මම සාමාන්‍යයෙන් පොදු ස්ථිතික දේපලක් ලබා ගන්නෙකු සහ පුද්ගලික පුද්ගලික ස්ථිතික කියවීමේ ක්ෂේත්‍රයක් භාවිතා කරමි .


7

කොන්ස්ට්: කොන්ස්ට් යනු "නියතය" මිස වෙන කිසිවක් නොවේ, එහි අගය නියත නමුත් සංයුක්ත වේලාවේ විචල්‍යයකි. ඒ සඳහා වටිනාකමක් පැවරීම අනිවාර්ය වේ. පෙරනිමියෙන් නියතයක් ස්ථිතික වන අතර සමස්ත වැඩසටහන පුරාම අපට විචල්‍ය විචල්‍යයක අගය වෙනස් කළ නොහැක.

ස්ථිතික කියවීම පමණක්: ස්ථිතික කියවීමට පමණක් වර්ගයක විචල්‍යයක අගය ධාවන වේලාවට පැවරිය හැකිය. නැතහොත් සම්පාදනය කරන වේලාවට පවරා ගත හැකි අතර ධාවන වේලාවේදී වෙනස් කළ හැකිය. නමුත් මෙම විචල්‍යයේ අගය වෙනස් කළ හැක්කේ ස්ථිතික ඉදිකිරීම්කරු තුළ පමණි. තවදුරටත් වෙනස් කළ නොහැක. එය ක්‍රියාත්මක විය හැක්කේ එක් වරක් පමණි

යොමුව: c-Sharcorner


6

පසුකාලීන අනුවාදයක වෙනස් විය හැකි අගයක් වෙනත් එකලස් කිරීම්වලට නිරාවරණය කිරීමේදී ස්ථිතික කියවීමේ ක්ෂේත්‍රයක් වාසිදායක වේ.

උදාහරණයක් ලෙස, එකලස් Xකිරීම නියතයක් පහත පරිදි නිරාවරණය කරයි යැයි සිතමු :

public const decimal ProgramVersion = 2.3;

එකලස් නම් Yයොමු Xහා භාවිතයන් මෙම නියතය වටිනාකම 2.3 එකලස් විළඳ ඇත Yසම්පාදනය විට. මෙයින් අදහස් කරන්නේ Xනියත කට්ටලය සමඟ 2.4 ලෙස නැවත සම්පාදනය කරන්නේ නම්, නැවත සම්පාදනය වන Yතෙක් පැරණි අගය 2.3 භාවිතා කරන Yබවයි. ස්ථිතික කියවීමට පමණක් ඇති ක්ෂේත්‍රයක් මෙම ගැටළුව මඟහරවා ගනී.

මෙය දෙස බැලීමේ තවත් ක්‍රමයක් නම්, අනාගතයේ වෙනස් විය හැකි ඕනෑම අගයක් අර්ථ දැක්වීම අනුව නියත නොවන අතර එය එකක් ලෙස නිරූපණය නොකළ යුතුය.


3

const:

  1. ප්‍රකාශය මත වටිනාකම ලබා දිය යුතුය
  2. කාල නියතය සම්පාදනය කරන්න

කියවීමට පමණි:

  1. ඉදිකිරීම්කරුවන් භාවිතා කරමින් ප්‍රකාශනයේදී හෝ ධාවන වේලාවේදී අගය ලබා දිය හැකිය. භාවිතා කළ ඉදිකිරීම්කරු මත පදනම්ව වටිනාකම වෙනස් විය හැකිය.
  2. ධාවන කාල නියතය

නැවත "ලබා දිය යුතුය" : ඔබ අදහස් කරන්නේ "ලබා දිය යුතුය" යන්නද? ඒ වටා ක්‍රමයක් තිබේද?
පීටර් මෝර්ටෙන්සන්

3

Const : නියත විචල්ය අගයන් ප්රකාශයට පත් සමග එය වෙනස් කළ නොහැකි බව පසුව පැහැදිලි කළ යුතුය. const යනු ව්‍යංගයෙන් ස්ථිතික බැවින් පන්ති අවස්ථාවක් නිර්මාණය නොකර අපට ඒවාට ප්‍රවේශ විය හැකිය. සම්පාදනය කරන වේලාවේදී මෙය වටිනාකමක් ඇත.

ReadOnly : ප්‍රකාශ කරන අතරම කියවීමේ පමණක් විචල්‍ය අගයන් නිර්වචනය කළ හැකි අතර ධාවන වේලාවේදී ඉදිකිරීම්කරු භාවිතා කරයි. පන්ති නිදසුනක් නොමැතිව කියවීමට-පමණක් විචල්‍යයන්ට ප්‍රවේශ විය නොහැක.

ස්ථිතික කියවීමට පමණි : අපට ප්‍රකාශ කරන අතරම ස්ථිතික කියවිය හැකි විචල්‍ය අගයන් නිර්වචනය කළ හැකි අතර ස්ථිතික ඉදිකිරීම්කරුවෙකු හරහා පමණක් මිස වෙනත් ඉදිකිරීම්කරුවෙකු සමඟ නොවේ. පංති නිදසුනක් (ස්ථිතික විචල්‍යයන් ලෙස) නිර්මාණය නොකර අපට මෙම විචල්‍යයන්ට ප්‍රවේශ විය හැකිය.

විවිධ එකලස් කිරීම් වල විචල්‍යයන් පරිභෝජනය කිරීමට සිදුවුවහොත් ස්ථිතික කියවීම පමණක් වඩා හොඳ තේරීමක් වනු ඇත. කරුණාකර පහත බ්ලොග් සටහනේ සම්පූර්ණ තොරතුරු පරීක්ෂා කරන්න:

කොන්ස්ට් නූල් - පාදයට වෙඩි තැබීමට ඉතා පහසු ක්‍රමයකි


ඔබට පිළිතුර අවතක්සේරු කළේ ඇයිදැයි මට කියන්න පුළුවන්ද, එබැවින් මටත් මෙහිත් යාවත්කාලීන කළ හැකිය.
user1756922

ඩීවීවී නොවේ, නමුත් සමහර විට මෙම පිළිතුර මෙහි දැනටමත් සවිස්තරාත්මක පිළිතුරු සඳහා කිසිවක් එකතු නොකරයි.
මාක් එල්.

ඇත්ත වශයෙන්ම, 90 දශකයේ අග භාගයේ දී ජාවාහි දී මතක තබා ගන්න, විවිධ පුද්ගලයින් විසින් විවිධ භාජන නිපදවන පන්ති ලිපිගොනු එකිනෙකට සම්බන්ධ වූ (එකිනෙකා ගැන සඳහන් කර ඇත) සහ පොදු
කොන්ස් ස්ට්‍රිං

3

සී # .නෙට් හි නියත හා ස්ථිතික කියවිය හැකි ක්ෂේත්‍ර අතර සුළු වෙනසක් ඇත

සම්පාදනය කරන වේලාවේදී අගය සමඟ ආරම්භ කළ යුතුය.

const යනු පෙරනිමියෙන් ස්ථිතික වන අතර එය නියත අගයකින් ආරම්භ කළ යුතුය, එය පසුව වෙනස් කළ නොහැක. එය සියලු දත්ත සමුදායන් සමඟ භාවිතා කළ නොහැක. හිටපු දිනය ටයිම් සඳහා. එය ඩේටයිම් දත්ත සමුදාය සමඟ භාවිතා කළ නොහැක.

public const DateTime dt = DateTime.Today;  //throws compilation error
public const string Name = string.Empty;    //throws compilation error
public static readonly string Name = string.Empty; //No error, legal

කියවීමට පමණක් ස්ථිතික යැයි ප්‍රකාශ කළ හැකි නමුත් අවශ්‍ය නොවේ. ප්‍රකාශ කරන අවස්ථාවේ ආරම්භ කිරීම අවශ්‍ය නොවේ. එහි වටිනාකම එක් වරක් ඉදිකිරීම්කරු භාවිතා කර පැවරිය හැකිය. එබැවින් කියවිය හැකි ක්ෂේත්‍රයේ අගය එක් වරක් වෙනස් කිරීමේ හැකියාවක් ඇත (එය ස්ථිතිකද නැද්ද යන්න ගැටළුවක් නොවේ), එය නියත වශයෙන්ම කළ නොහැක.


1

ස්විච් ප්‍රකාශ වලදී හෝ ආරෝපණ ඉදිකිරීම්කරුවන්ට මෙන් කියවීමට පමණක් ස්ථිතික කළ නොහැකි අවස්ථාවන්හිදී සංයුක්තයක් (සම්පාදක වේලාවේදී තීරණය වේ) භාවිතා කළ හැකිය. මෙයට හේතුව කියවිය හැකි ක්ෂේත්‍ර නිරාකරණය වන්නේ ධාවන වේලාවේදී පමණක් වන අතර සමහර කේත සැකසුම් සඳහා සම්පාදිත කාල සහතිකයක් අවශ්‍ය වේ. ඉදිකිරීම්කරුවෙකු තුළ කියවිය හැකි ස්ථිතිකයක් ගණනය කළ හැකි අතර එය බොහෝ විට අත්‍යවශ්‍ය හා ප්‍රයෝජනවත් දෙයකි. මගේ මතය අනුව ඒවායේ භාවිතය මෙන් වෙනස ක්‍රියාකාරී වේ.

මතක විබෙදුම සම්බන්ධයෙන් ගත් කල, අවම වශයෙන් නූල් සහිතව (විමර්ශන වර්ගයක් වීම), දෙකම සීමාවාසිකව ඇති බවට කිසිදු වෙනසක් නැති බව පෙනේ.

පුද්ගලිකව, මගේ පෙරනිමිය කියවීමට පමණක් ස්ථිතික වන අතර, එය මට වඩා අර්ථාන්විත හා තාර්කික අර්ථයක් ඇති කරයි, විශේෂයෙන් බොහෝ අගයන් සම්පාදනය කරන වේලාවට අවශ්‍ය නොවන බැවින්. තවද, කැපී පෙනෙන පිළිතුරෙහි සඳහන් වන පරිදි, මහජන කියවීමට පමණක් සංඛ්‍යාලේඛන අසාමාන්‍ය හෝ අසාමාන්‍ය නොවේ: නිදසුනක් වශයෙන්, System.String.Emptyඑකකි.


0

සංයුක්තය සහ ස්ථිතික කියවීමට පමණක් ප්‍රකාශ කිරීම අතර තවත් වෙනසක් පමණක් වන්නේ මතක විබෙදුමයි.

ස්ථිතික ක්ෂේත්රය අයත් වර්ගය නිදසුනකට වඩා වස්තුවක වර්ගයට ය. මෙහි ප්‍රති As ලයක් වශයෙන්, පළමු වරට පන්තිය යොමු කළ පසු, ස්ථිතික ක්ෂේත්‍රය මතකයේ ඉතිරිව ඇති කාලය තුළ "ජීවත්වනු ඇත", සහ ස්ථිතික ක්ෂේත්‍රයේ එකම අවස්ථාව වර්ගයේ සියලු අවස්ථා මගින් යොමු කරනු ලැබේ.

අනෙක් අතට, සංයුක්ත ක්ෂේත්‍රයක් “වර්ගයේ නිදසුනකට අයත් වේ.

අවලංගු කිරීමේ මතකය ඔබට වඩා වැදගත් නම්, const භාවිතා කිරීමට කැමති වන්න . වේගය නම්, ස්ථිතික කියවීමට පමණක් භාවිතා කරන්න .


0

නියතයන් යනු නමට සමාන වන අතර, වෙනස් නොවන ක්ෂේත්‍ර සහ සාමාන්‍යයෙන් කේතයේ සංයුක්ත වේලාවේදී සංඛ්‍යාත්මකව අර්ථ දක්වා ඇත.

කියවීමට-පමණක් විචල්‍යයන් යනු විශේෂිත කොන්දේසි යටතේ වෙනස් විය හැකි ක්ෂේත්‍ර වේ.

ඔබ ඒවා නියතයක් ලෙස ප්‍රථම වරට ප්‍රකාශ කරන විට ඒවා ආරම්භ කළ හැකිය, නමුත් සාමාන්‍යයෙන් ඒවා ආරම්භකයා තුළ වස්තු ඉදිකිරීමේදී ආරම්භ වේ.

ආරම්භය සිදු වූ පසු, ඉහත සඳහන් කළ කොන්දේසි අනුව ඒවා වෙනස් කළ නොහැක.

ස්ථිතික කියවීම පමණක් මට තේරීමක් නැති නිසා, එය ස්ථිතික නම් සහ එය කිසි විටෙකත් වෙනස් නොවේ නම්, එය පොදු සං .ටකය භාවිතා කරන්න. එය වෙනස් කළ හැකි නම් එය නියතයක් නොවන අතර ඔබේ අවශ්‍යතා අනුව ඔබට කියවීමට පමණක් හෝ සාමාන්‍ය විචල්‍යයක් භාවිතා කළ හැකිය.

එසේම තවත් වැදගත් වෙනසක් වන්නේ නියතයක් පන්තියට අයත් වන අතර කියවීමට පමණි විචල්‍යය නිදසුනට අයත් වේ!

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.