public override Boolean Equals(Object obj) { // Если в базовом классе реализован метод Equals и это // не класс Object, раскомментируйте следующую строку // if (!base.Equals(obj)) return false; // Так как 'this' не равен null, при obj равном null // объекты не совпадают // ПРИМЕЧАНИЕ. Эту строку можно удалить, если вы считаете, // что базовый тип корректно реализует метод Equals if (obj == null) { return(false); } // Объекты разных типов не могут совпасть // ПРИМЕЧАНИЕ. Эту строку можно удалить, если вы считаете, // что базовый тип корректно реализует метод Equals if (this.GetType() != obj.GetType()) { return(false); } // Приведение obj к нашему типу для получения доступа к полям // ПРИМЕЧАНИЕ. Это приведение работает всегда, // так как объекты принадлежат к одному типу AccountsAttribute other = (AccountsAttribute)obj; // Сравнение значений полей 'this' и other if (other.m_accounts != m_accounts) { return(false); } return(true); // Объекты совпадают }
public override Boolean Match(Object obj) { // Если в базовом классе реализован метод Match и это не // класс Attribute, раскомментируйте следующую строку // if (!base.Match(obj)) return false; // Так как 'this' не равен null, если obj равен null, // объекты не совпадают // ПРИМЕЧАНИЕ. Эту строку можно удалить, если вы считаете, // что базовый тип корректно реализует метод Match if (obj == null) { return(false); } // Объекты разных типов не могут быть равны // ПРИМЕЧАНИЕ. Эту строку можно удалить, если вы считаете, // что базовый тип корректно реализует метод Match if (this.GetType() != obj.GetType()) { return(false); } // Приведение obj к нашему типу для доступа к полям // ПРИМЕЧАНИЕ. Это приведение всегда работает, // так как объекты принадлежат к одному типу AccountsAttribute other = (AccountsAttribute)obj; // Сравнение полей // Проверка, является ли accounts 'this' подмножеством // accounts объекта others if ((other.m_accounts & m_accounts) != m_accounts) { return(false); } return(true); // Объекты совпадают }
private static void CanWriteCheck(Object obj) { // Создание и инициализация экземпляра типа атрибута Attribute checking = new AccountsAttribute(Accounts.Checking); // Создание экземпляра атрибута, примененного к типу Attribute validAccounts = obj.GetType().GetCustomAttribute <AccountsAttribute>(false); // Если атрибут применен к типу и указывает на счет "Checking", // значит, тип может выписывать чеки if ((validAccounts != null) && checking.Match(validAccounts)) { Console.WriteLine("{0} types can write checks.", obj.GetType()); } else { Console.WriteLine("{0} types can NOT write checks.", obj.GetType()); } }
private static void CanWriteCheck(Object obj) { // Создание и инициализация экземпляра типа атрибута Attribute checking = new AccountsAttribute(Accounts.Checking); // Создание экземпляра атрибута, примененного к типу Attribute validAccounts = obj.GetType().GetCustomAttribute<AccountsAttribute>(false); // Если атрибут применен к типу и указывает на счет "Checking", // значит, тип может выписывать чеки if ((validAccounts != null) && checking.Match(validAccounts)) { Console.WriteLine("{0} types can write checks.", obj.GetType()); } else { Console.WriteLine("{0} types can NOT write checks.", obj.GetType()); } }