ПредишенСледващото

Пиша клас, който е отговорен за регулирането на настройките на програмата. Трябва да има метод, който всички имоти ще определят стойността по подразбиране. Тя е в застой, нещо, което аз не знам как да завърши на въпроса. код:

Ако използвате родово, аз тичам в проблем. Имам нужда да се Accessor да зададете областта за получаване на стойности от регистъра, пиша това:

върне Convert.ToInt32 (RES); - проблем - как да се уточни, че искате да се върнете променлива от тип Т

И още един забележка. Настройки - това име + стойност или име + стойност + стойността по подразбиране. Що се отнася до мен - добре, това не се вписва в тук името на стойността по подразбиране + +, за да започне, когато се стартира операционната система. Нещо не са били замислени. Нека още веднъж. Има една настройка, има набор от настройки. Те само всички низ, или може да бъде дори по-Int, булев, и така нататък? - А К 26 март в 12:46

@AK аз исках да направя умно нещо да полето за стойността, за да настроите вида на инстанция беше твърдо решен да създаде инстанция. Аз не усвоили темата и реших да направя стойност от тип низ, и там наистина да доведе до това, което е необходимо. С "да започне, когато стартирате операционната система," логиката остава един и същ, само ако ДА - запис в регистъра на желаната линия - ако не изтриете - Antykus 26 Март в 12:52

Нека разберем как това може да се направи технически.

Като за начало, как да получите списък на всички полета? Имаме (метод Type.GetFields). но това, което ни вид? typeof (Опции) не може да бъде истинският ни вид, изведнъж, ние имаме произведени в класа наследник? Правилният начин за получаване на тип - метод GetType ().

Освен това, кои области искаме да получа? Имаме нужда от отворени (публични и частни затвори.) Поле: област обикновено се скрие и отворете свойствата. В допълнение, ние трябва инстанция области, но не статични полета. Но метод GetFields връща само на открито поле за клас предшественик, така че ние трябва да обхождате над всички базови типове.

Ако наистина обхождане на всички видове, ние не трябва да се наследява поле, така че се хранят в GetFields модификатор BindingFlags.DeclaredOnly.

Това води до следния код:

Какво е вътре в цикъла? Ние трябва да зададете стойност по подразбиране. Ако стойността е по подразбиране (T) от този тип, е възможно да го получите със следния код:

Той проверява дали нашият вид смислен или препратка тип. За справка тип е стойността на подразбиране са нула. стойностен тип има конструктор по подразбиране.

Ако продължавате по подразбиране стойност в едно от полетата, и се различават по име, не е ясно какво трябва да направя, ако типа на полето и по подразбиране-стойностите се различават. За вашия случай можете просто да напишете:

и ако искате да се избегне възлагане подразбиране стойност себе си, трябва да се провери неговото име и принадлежност (.. така че да бъде много области със същото име):

Сега за проблемите.

За начало, на полето. Вие определяте стойности на полетата, заобикаляйки свойства. Това не е съвсем вярно, защото при определяне свойства могат да изпълняват всяка логика, която сте пропуснали с вашия подход. (Този проблем може да бъде частично решен чрез работата с имоти, вместо на полета, но ако ви клас е и области, които не попадат върху имота, не могат да бъдат избегнати проблемите.)

След това, стойността по подразбиране. Тази стойност не може да бъде добра начална стойност за всички области. Ако използвате по подразбиране (T). след това линия правилната стойност може да бъде "" или има "(няма)". Отражение е напълно отрича.

Освен това, отражение, не можете да се откаже от зануляване някои от областите, освен че трябва да въведете атрибути, и принуждава потребителя да прикачите атрибути за областите, които влияят на поведението на метода се нулира. Това ще се превърне невинен Вие в рамка.

Свързани статии

Подкрепете проекта - споделете линка, благодаря!