ДЕФИНИЦИЯ
Статично поле за данни или свойство е променлива, капсулирана в абстракцията на дефиницията на клас.
Атрибутът е декорация, параметър, а не самите данни, добавен към тип клас или към членско поле, свойство или метод.
Самият атрибут не прави нищо и не представлява нищо по отношение на данни или код: това е концептуален артефакт, добавен към кода, който може да се използва от кода, по някакъв метод, за промяна на поведението.
Атрибутът е клас, който може да съдържа данни и методи за управление на някои поведения на клас.
Атрибутите позволяват по-голямо разделение между абстракция и капсулиране.
Те позволяват по-добро усъвършенстване на дизайна, както и специализиране на поведението по време на кодиране, като същевременно позволяват обобщение.
ПРИМЕР
Помислете за този клас:
public class LogFile
{
static public List<LogFile> LogFiles { get; private set; }
}
Тук това е статичен списък, който съдържа всички създадени регистрационни файлове.
Това е данни, променлива, нещо конкретно и осезаемо, директно използваемо от вътрешен и външен код.
Ето пример за използване на атрибут:
[LogFileStorage(LogFilePath.User)]
public class LogFile
{
}
Тук това е кодов таг, добавен към дефиницията на класа на ниво код, който не може да бъде променен, освен ако не се използва рефлексия, и който може да се използва от класа на мениджъра на логфайлове, за да дефинира път за запис като във временна папка или потребител папка на приложението или дефиниран по време на изпълнение път (по различен и отделен начин от константа или стойност по подразбиране).
Така че в този пример методът за запис на лог файл ще провери атрибутите на класа, за да знае къде да го запише.
Атрибутът позволява на програмистите да параметризират класа, който дефинират, както и дъщерния клас и всеки член на класа.
Класически пример е атрибутът Serializable:
https://docs.microsoft.com/dotnet/api/system.serializableattribute
УРОЦИ
https://www.tutorialspoint.com/csharp/csharp_attributes.htm
https://docs.microsoft.com/dotnet/csharp/programming-guide/concepts/attributes/
https://docs.microsoft.com/dotnet/csharp/tutorials/attributes
https://www.tutorialspoint.com/csharp/csharp_encapsulation.htm
https://www.c-sharpcorner.com/UploadFile/mkagrahari/introduction-to-object-oriented-programming-concepts-in-C-Sharp/
person
Olivier Rogier
schedule
04.07.2020
CallerMemberName
и той ще присвои името на вашия член на повикващия като стойност на аргумента, не можете да правите повечето от тези неща със статични полета. Ще използвате статичните полета предимно за деклариране на някои константи - person sTrenat   schedule 04.07.2020