• Как продвинуть сайт на первые места?
    Вы создали или только планируете создать свой сайт, но не знаете, как продвигать? Продвижение сайта – это не просто процесс, а целый комплекс мероприятий, направленных на увеличение его посещаемости и повышение его позиций в поисковых системах.
    Ускорение продвижения
    Если вам трудно попасть на первые места в поиске самостоятельно, попробуйте технологию Буст, она ускоряет продвижение в десятки раз, а первые результаты появляются уже в течение первых 7 дней. Если ни один запрос у вас не продвинется в Топ10 за месяц, то в SeoHammer за бустер вернут деньги.
  • Сервис онлайн-записи на собственном Telegram-боте
    Тот, кто работает в сфере услуг, знает — без ведения записи клиентов никуда. Мало того, что нужно видеть свое расписание, но и напоминать клиентам о визитах тоже. Нашли самый бюджетный и оптимальный вариант: сервис VisitTime.
    Для новых пользователей первый месяц бесплатно.
    Чат-бот для мастеров и специалистов, который упрощает ведение записей:
    Сам записывает клиентов и напоминает им о визите;
    Персонализирует скидки, чаевые, кэшбэк и предоплаты;
    Увеличивает доходимость и помогает больше зарабатывать;


Иллюстрированный самоучитель по Architecture .NET

Использование самостоятельно созданного атрибута

Перед тем как обсудить реализацию собственного атрибута, рассмотрим, как используется атрибут InitialDirectory. Чтобы указать начальный каталог для класса, мы сделаем класс производным от базового класса DirectoryContext. Тогда мы сможем применить к такому классу атрибут InitialDirectory, который принимает параметр типа String*, определяющий путь к начальному каталогу. Свойство DirectoryPath извлекает путь из метаданных. Если к нашему классу не применен атрибут, этот путь примет значение по умолчанию. Ниже приведен код нашей тестовой программы.

Выполняя этот пример на произвольной системе, можно сменять каталог, указанный атрибутом, на один из существующих на этой конкретной машине.

//AttributeDemo.h
using namespace System;
// использование пространства имен Система;
using namespace System::10;
// использование пространства имен Система::10;
_gc class Normal: public DirectoryContext
Т"
};
[InitialDirectory("С:\\OI\\NetCpp\\Chap08")
] _gc class Special: public DirectoryContext // класс сборщика мусора
Специальный:DirectoryContext
{
};
public _gc class AttributeDemo
// класс сборщика мусора AttributeDemo
{
public:
static void Main() {
Normal *objNormal = new Normal;
Console::WriteLine(
"path = {0}",
objNormal › DirectoryPath);
// путь = ShowDirectoryContents(objNormal › DirectoryPath);
Special *objSpecial = new Special;
// новый Специальный Console::WriteLine(
"path = {0}",
objSpecial › DirectoryPath);
// путь = ShowDirectoryContents(objSpecial › DirectoryPath);
} private:
static void ShowDirectoryContents(String *path)
// Строка {
Directorylnfo *dir = new Directorylnfo(path);
// путь
Filelnfo *files[] = dir › GetFiles();
Console::WriteLine("Files:");
// Файлы:
lEnumerator *pEnum = files › GetEnumerator();
// файлы
while (pEnum › MoveNext())
{
Filelnfo *f =
dynamic_cast<File!nfo *>(pEnum › Current);
Console::WriteLine(" {0}", f › Name);
// Имя
}
Directorylnfo *dirs [] = dir › GetDirectories(
};
Console::WriteLine("Directories:");
// Каталоги: pEnum = dirs › GetEnumerator();
while (pEnum › MoveNext()
}
{
Directorylnfo *d =
dynamic_cast<Directory!nfo *>(pEnum › Current);
Console::WriteLine(" {0}", d › Name);
// Имя
}
}
};

Вот выдача:

path = c:\OI\NetCpp\Chap08\CustomAttribute // путь Files: // Файлы
CustomAttribute.vcproj
CustomAttribute.neb
ReadMe.txt
CustomAttribute.cpp
Assemblylnfо.cpp
stdafx.cpp
stdafx.h
CustomAttribute.sin
CustomAttribute.suo
AttributeDemo.h
DirectoryContext.h
DirectoryAttribute.h Directories: // Каталоги
Debug // Отладка path = C:\OI\NetCpp\Chap08 // путь Files: // Файлы Directories: // Каталоги
Reflection // Отражение
Dynamic // Динамический
Filel()
Serialization // Преобразование в последовательную форму
Hotel // Гостиница
ISerialization
Threading
PulseAll
Threadlsolation
AppDomain
Asynch
AsynchThreading
CustomAttribute
MarshalByReference
Remoting
Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.