Результаты поиска
И DefaultEvent ASP.NET UserControl по
Контур
OK, я гуглил это и уже ожидал большой жир NO! ! Но я подумал, что должен спросить, так как я знаю, что иногда могут быть странные маленькие gem знания, скрывающиеся в головах людей ^_^
Я работаю над некоторыми упражнениями в книге для изучения, и это конкретное упражнение-пользовательские элементы управления. Я собрал элемент управления и хотел бы установить для него DefaultEvent (сделав это для предыдущих элементов управления), поэтому, когда я дважды щелкаю по нему, созданное событие по умолчанию-это то, что я указываю.
NOTE: это стандартный пользовательский элемент управления (.ascx), NOT пользовательский визуализированный элемент управления.
текущий код
Вот определение события класса &:
[System.ComponentModel.DefaultEvent("OKClicked")]
public partial class AddressBox : System.Web.UI.UserControl
{
public event EventHandler OKClicked;
текущий результат
Теперь, когда я дважды щелкаю элемент управления, когда он находится на странице ASPX, создается следующее:
protected void AddressBox1_Load(object sender, EventArgs e)
{
}
Не совсем то, что я ожидал! Итак, мой вопрос:
Можно ли определить DefaultEvent для UserControl? Это хак? Если это не поддерживается, почему?
Примечание: как мы помещаем подчеркивания в код? Кажется, я не могу поставить и избежать char?
Как лучше всего использовать версию файла и версию Assembly?
В .NET есть два номера версий, доступных при построении проекта, версия файла и версия Assembly. Как вы используете эти цифры? Оставить их прежними? Автоматическое увеличение одного, но ручное изменение другого?
А как насчет атрибута AssemblyInformationalVersion ?
Я нашел эту статью в базе знаний Майкрософт поддержки (KB), которая предоставляла некоторую помощь: как использовать версию Assembly и версию файла Assembly .
Кто-нибудь знает быстрый способ добраться до пользовательских атрибутов по значению enum?
Это, вероятно, лучше всего показать на примере. У меня есть перечисление с атрибутами:
public enum MyEnum {
[CustomInfo("This is a custom attrib")]
None = 0,
[CustomInfo("This is another attrib")]
ValueA,
[CustomInfo("This has an extra flag", AllowSomething = true)]
ValueB,
}
Я хочу добраться до этих атрибутов из экземпляра:
public CustomInfoAttribute GetInfo( MyEnum enumInput ) {
Type typeOfEnum = enumInput.GetType(); //this will be typeof( MyEnum )
//here is the problem, GetField takes a string
// the .ToString() on enums is very slow
FieldInfo fi = typeOfEnum.GetField( enumInput.ToString() );
//get the attribute from the field
return fi.GetCustomAttributes( typeof( CustomInfoAttribute ), false ).
FirstOrDefault() //Linq method to get first or null
as CustomInfoAttribute; //use as operator to convert
}
Так как это использует отражение, я ожидаю некоторую медлительность, но это кажется беспорядочным, чтобы преобразовать значение enum в строку (которая отражает имя), когда у меня уже есть его экземпляр.
У кого-нибудь есть лучший способ?
Принудительное оформление атрибутов классов / методов
Следуя моему недавнему вопросу о больших, сложных объектах Как результате веб-службы . Я думал о том, как я могу гарантировать, что все будущие дочерние классы сериализуются в XML.
Теперь, очевидно, я мог бы реализовать интерфейс IXmlSerializable , а затем бросить в него читателя / писателя, но я хотел бы избежать этого, поскольку это означает, что мне нужно создавать экземпляр читателя/писателя всякий раз, когда я хочу это сделать, и 99.99% времени я буду работать со строкой, поэтому я могу просто написать свой собственный.
Однако, чтобы сериализовать до XML, я просто украшаю класс и его членов Xml? ?? атрибуты ( XmlRoot , XmlElement и др.) и затем передать его в XmlSerializer и StringWriter , чтобы получить строку. И это все хорошо. Я намерен поместить метод для возврата строки в общий метод утилиты, поэтому мне не нужно беспокоиться о типе и т. д.
То, что меня беспокоит, заключается в следующем: если я не украшаю класс(ы) необходимыми атрибутами, ошибка не возникает до времени выполнения.
Есть ли способ применить украшение атрибута? Можно ли это сделать с помощью FxCop? (Я еще не использовал FxCop)
UPDATE:
Извините за задержку в получении этого закрыть ребята, много дел!
Определенно нравится идея использовать отражение, чтобы сделать это в тестовом случае, а не прибегать к FxCop (например, чтобы держать все вместе).. Ответ Фредрика Калсета был фантастическим, спасибо за включение кода, поскольку мне, вероятно, потребовалось бы немного копать, чтобы понять, как это сделать самому!
+1 к другим ребятам за аналогичные предложения :)
Что такое атрибуты в .NET?
Что такое атрибуты в .NET, для чего они хороши, и как я могу создать свои собственные атрибуты?
Уведомить разработчика о методе "DO NOT USE"
Ладно, я знаю, о чем ты думаешь, верно?
Короче говоря, у меня есть класс, который должен быть сериализован в XML. Для того, чтобы XmlSerializer выполнял свою магию, класс должен иметь пустой конструктор по умолчанию:
public class MyClass
{
public MyClass()
{
// required for xml serialization
}
}
Итак, мне нужно иметь его, но я не хочу, чтобы люди его использовали , поэтому есть ли какой-либо атрибут, который можно использовать для обозначения метода как "не использовать"?
Я думал об использовании устаревшего атрибута (поскольку это может остановить сборку), но это просто похоже на "wrong", есть ли другой способ сделать это, или мне нужно идти вперед и кусать пулю? :)
Обновление
OK, я принял ответ кита, так как я думаю в глубине души, я полностью согласен. Вот почему я задал этот вопрос в первую очередь, мне не нравится идея наличия устаревшего атрибута.
Однако...
Существует еще проблема, в то время как мы уведомлены в intellisense, в идеале, мы хотели бы разбить сборку, так есть ли способ сделать это? Возможно, создать пользовательский атрибут?
Здесь был создан более сфокусированный вопрос .
Создайте атрибут для разрыва сборки
Хорошо, это следует из моего предыдущего вопроса .
То, что я действительно хотел бы сделать, - это создать какой-то атрибут, который позволяет мне украсить метод, который сломает сборку . Очень похоже на устаревший атрибут("reason", true) , но без ложной идентификации устаревшего кода.
Чтобы уточнить: я не хочу, чтобы он нарушал сборку при любом нажатии F6 (Build), я только хочу, чтобы он нарушал сборку, если метод, украшенный атрибутом, вызывается где-то еще в коде. Как я уже сказал, Похоже на устаревшее, но не то же самое.
Я знаю, что я не одинок в этом, так как другие пользователи хотят использовать его по другим причинам . Я никогда не создавал пользовательские атрибуты раньше, так что все это ново для меня!