https://zoheirsoftware.com/blog/attribute-in-csharp-training