సి # లో గుణాలు ఎలా పని చేస్తాయి? - క్లౌడ్‌సావీ ఐటి
సి # లో గుణాలు ఎలా పని చేస్తాయి? – క్లౌడ్‌సావీ ఐటి
C # లో, గుణాలు తరగతులు, రకాలు, పద్ధతులు మరియు ఫీల్డ్‌లతో సహా కోడ్‌కు కేటాయించిన మెటాడేటా ట్యాగ్‌లు. ప్రతిబింబం ఉపయోగించి, మీ ప్రోగ్రామ్‌లోని ప్రవర్తనలను మార్చడానికి మీరు ట్యాగ్‌లను పరిశీలించవచ్చు. వాటిని ఎలా ఉపయోగించాలో మరియు మీ స్వంతంగా ఎలా రాయాలో మేము మీకు చూపుతాము.
గుణాలు ఏమిటి?
సరళంగా చెప్పాలంటే, గుణాలు కొంత సమాచారాన్ని కలిగి ఉన్న మెటాడేటా ట్యాగ్‌లు. ట్యాగ్ చేయబడిన కోడ్ పైన ఉన్న చదరపు బ్రాకెట్లలోని రకం పేరు వారికి వాక్యనిర్మాణం:
[Attribute]void Command() {
తరగతులు, పద్ధతులు, క్షేత్రాలు, నిర్మాణాలు, రకాలు మొదలైన వాటితో వీటిని అనుసంధానించవచ్చు. ప్రాప్యత చేయగల ఇన్‌పుట్‌లను అందించడానికి పారామితులను కూడా కేటాయించవచ్చు, అయినప్పటికీ అవి ప్రాథమిక రకానికి పరిమితం. లక్షణాన్ని ఒక పద్ధతిగా ప్రారంభించడం ద్వారా మీరు పారామితులను సెట్ చేయవచ్చు:
సీరియలైజేషన్ కోసం ఫీల్డ్లను గుర్తించడం ఒక సాధారణ ఉపయోగం కేసు. సి # లో అంతర్నిర్మిత ఉంది [Serializable] ట్యాగ్, ఇది తరగతి యొక్క బైట్‌లలో సీరియలైజేషన్‌కు మద్దతు ఇస్తుంది మరియు అనేక మూడవ పార్టీ లైబ్రరీలు వారి స్వంత ట్యాగ్‌లను అమలు చేస్తాయి. ఉదాహరణకు, మొంగోడిబి కోసం సి # డ్రైవర్‌లో బిసోన్‌లో సీరియలైజేషన్ కోసం చాలా ట్యాగ్‌లు ఉన్నాయి మరియు ఒక స్ట్రింగ్‌ను డాక్యుమెంట్ ఐడిగా అర్థం చేసుకునే ప్రత్యేక ట్యాగ్ కూడా ఉంది.
మరొక సాధారణ ఉపయోగ సందర్భం ఉన్నత స్థాయి కమాండ్ హ్యాండ్లర్ చేత నిర్వహించబడే ట్యాగింగ్ పద్ధతులు. ఉదాహరణకు, డిస్కార్డ్ బాట్, ఎవరైనా సందేశం పంపిన ప్రతిసారీ నిర్వహించబడే ఆదేశాల జాబితాను నమోదు చేస్తుంది. మీరు క్రొత్తదాన్ని వ్రాసే ప్రతిసారీ కమాండ్ హ్యాండ్లర్‌కు ప్రతి ఆదేశాన్ని మాన్యువల్‌గా జోడించే బదులు, మీరు ఈ పద్ధతిని ట్యాగ్ చేయవచ్చు [Command("commandname")]మరియు రన్టైమ్‌లో స్వయంచాలకంగా జోడించే సాధారణ పరిష్కారాన్ని ఉపయోగించండి.
మరింత తెలుసుకోవడానికి మీరు మైక్రోసాఫ్ట్ యొక్క డాక్యుమెంటేషన్ చదవవచ్చు, కానీ అవి చాలా సులభం.
మీ లక్షణాలను ఎలా సృష్టించాలి
వాస్తవానికి, మీ తరగతులకు వర్తింపజేయడానికి మీరు మీ స్వంత అనుకూల లక్షణాలను సులభంగా సృష్టించవచ్చు. మీరు చేయవలసిందల్లా ఒక తరగతిని సృష్టించడం System.Attribute. మీరు ఈ తరగతికి ఎలా ఉపయోగించాలో పేర్కొనే లక్షణాన్ని కూడా జోడించవచ్చు; ఉదాహరణకు, ఇది తరగతులు లేదా నిర్మాణాలకు మాత్రమే వర్తిస్తుంది.
అప్పుడు, మీరు ఫీల్డ్‌లను మరియు ఇన్‌పుట్ పారామితులను తీసుకొని ఫీల్డ్‌లను జనాదరణ చేసే కన్స్ట్రక్టర్‌ను పేర్కొనవచ్చు. మీరు ఈ లక్షణాన్ని ఉపయోగించినప్పుడు, కాల్ చేయడం లాంటిది new Attribute(params), లేకుండా తప్ప new కీవర్డ్.
[System.AttributeUsage(System.AttributeTargets.Class | System.AttributeTargets.Struct)] public class AuthorAttribute : System.Attribute { private string name; public double version; public AuthorAttribute(string name) { this.name = name; version = 1.0; } }
కాబట్టి ఎన్కోడ్ చేసిన కోడ్‌లో లక్షణం ప్రస్తావించబడినంత వరకు, మీ కోడ్‌ను ట్యాగ్ చేయడానికి మీరు వాటిని ఉపయోగించుకోవచ్చు.
ప్రోగ్రామిక్‌గా లక్షణాలను యాక్సెస్ చేయడానికి, మీరు ప్రతిబింబం ఉపయోగించాలి. పనితీరు కోసం ప్రతిబింబం గొప్పది కాదు, కానీ లక్షణ వినియోగ సందర్భాలలో, ఇది సాధారణంగా పట్టింపు లేదు. మీరు ఉపయోగించవచ్చు Attribute.GetCustomAttributes ఫైల్ను తిరిగి ఇవ్వడానికి Attribute[], తరగతి రకాన్ని దాటి:
మీరు మొత్తం అసెంబ్లీలో లక్షణాల యొక్క అన్ని సందర్భాలను యాక్సెస్ చేయాలనుకుంటే, మీరు ఉపయోగించవచ్చు Assembly.GetExecutingAssembly().GetTypes() రన్నింగ్ రకాలను జాబితా చేసి, ఆ రకమైన అన్ని అనుకూల లక్షణాలను శోధించండి, అది శోధన పరామితిని కలిగి ఉందో లేదో చూడటానికి, ఐచ్ఛికంగా ఆ జాబితాను జత చేసిన తరగతి రకం ఆధారంగా ఫిల్టర్ చేస్తుంది.
var plugins = Assembly.GetExecutingAssembly().GetTypes() .Where(t => t.IsClass && t.BaseType == typeof(BasePlugin) && Attribute.GetCustomAttributes .ToList();
లక్షణ పారామితులను ప్రాప్యత చేయడానికి, వాటిని ఏ ఇతర ప్రజా ఆస్తి వలె నేరుగా గుణం తరగతి నుండి యాక్సెస్ చేయండి.
si # loo gunaalu ela pani chestayi? - cloudmesy aiti
si # loo gunaalu ela pani chestayi? – cloudmesy aiti
C # loo, gunaalu taragatulu, rakalu, paddhatulu mariyu feeldelatho sahaa kodeku ketayinchina metadeta tagnelu. pratibimbam upayoginchi, mee progromeloni pravartanalanu maarchadaaniki meeru tagnelanu pariseelinchavacchu. vaatini ela upayoginchaalo mariyu mee swantamgaa ela rayalo memu meeku chuuputaamu.
gunaalu emiti?
saralamgaa cheppalante, gunaalu kontha samaachaaraanni kaligi unna metadeta tagnelu. tag cheyabadina kod paina unna chadarapu bracketlaloni rakam paeru vaariki vaakyanirmaanam:
[Attribute]void Command() {
taragatulu, paddhatulu, kshetraalu, nirmaanaalu, rakalu modalaina vaatitho veetini anusandhaaninchavachchu. praapyata cheyagala inputelanu andinchadaaniki paaraamitulanu kuudaa ketayinchavacchu, ayinappatiki avi praathamika rakaniki parimitam. lakshanaanni oka paddhatigaa praarambhinchadam dwara meeru paaraamitulanu sett cheyavachu:
serialization kosam feeldlanu gurtinchadam oka saadhaarana upayogam kesu. si # loo antarnirmita undi [Serializable] tag, idhi taragati yokka baitelalo seeriyalijeshaneekku maddatu istundi mariyu aneka moodava party librarilu vaari swanta tagnelanu amalu chestayi. udaaharanaku, mongodibi kosam si # driverlo bisonelo serialization kosam chala tagnelu unnaayi mariyu oka stringeanu dacument aidiga artham chesukune pratyeka tag kuudaa undi.
maroka saadhaarana upayoga sandarbham unnata sthaayi command handler chetha nirvahinchabade tagging paddhatulu. udaaharanaku, discard bat, evaraina sandesam pampina pratisaarii nirvahinchabade aadesaala jaabitaanu namodu chestundi. meeru krottadaanni vrase pratisaarii command handlarynku prati aadesaanni manyuvalniga jodinche badulu, meeru ee paddhatini tag cheyavachu [Command("commandname")]mariyu rantaimlo swayamchaalakamgaa jodinche saadhaarana parishkaaraanni upayoginchandi.
marinta telusukovadaaniki meeru microsapht yokka dacumentation chadavavachhu, cony avi chala sulabham.
mee lakshanaalanu ela srushtinchaali
vaastavaaniki, mee taragatulaku vartimpajeyadaaniki meeru mee swanta anukuula lakshanaalanu sulabhamgaa srushtinchavachhu. meeru cheyavalasindalla oka taragatini srushtinchadam System.Attribute. meeru ee taragatiki ela upayoginchaalo perkone lakshanaanni kuudaa jodinchavachhu; udaaharanaku, idhi taragatulu leda nirmaanaalaku matrame vartistundi.
appudu, meeru feeldylanu mariyu input paaraamitulanu teesukoni feeldylanu janaadarana chese kanstraktarni perkonavacchu. meeru ee lakshanaanni upayoginchinappudu, kaal cheyadam lantidi new Attribute(params), lekunda tappa new keeverd.
[System.AttributeUsage(System.AttributeTargets.Class | System.AttributeTargets.Struct)] public class AuthorAttribute : System.Attribute { private string name; public double version; public AuthorAttribute(string name) { this.name = name; version = 1.0; } }
kabatti encod chesina kodelo lakshanam prastaavinchabadinanta varaku, mee kodenu tag cheyadaaniki meeru vaatini upayoginchukovachhu.
programickiga lakshanaalanu access cheyadaaniki, meeru pratibimbam upayoginchaali. paniteeru kosam pratibimbam goppadi kaadu, cony lakshana viniyoga sandarbhaalalo, idhi saadhaaranamgaa pattimpu ledu. meeru upayoginchavachhu Attribute.GetCustomAttributes failnu tirigi ivvadaaniki Attribute[], taragati rakaanni daati:
meeru mottam assembleelo lakshanaala yokka anni sandarbhaalanu access cheyalanukunte, meeru upayoginchavachhu Assembly.GetExecutingAssembly().GetTypes() ranning rakalanu jabita chesi, aa rakamaina anni anukuula lakshanaalanu sodhinchandi, adhi shodhana paraamitini kaligi undo ledho chudataniki, aichchikamgaa aa jaabitaanu jatha chesina taragati rakam aadhaaramgaa filter chestundi.
var plugins = Assembly.GetExecutingAssembly().GetTypes() .Where(t => t.IsClass && t.BaseType == typeof(BasePlugin) && Attribute.GetCustomAttributes .ToList();
lakshana paaraamitulanu praapyata cheyadaaniki, vaatini e itara praja aasti vale nerugaa gunam taragati nundi access cheyandi.