Как наследование работает на Атрибуты?

Первый вопрос, на который необходимо ответить, состоит в том, необходимо ли использовать поточную обработку

, Если функциональный CalculateSmth () является в основном Зависящим от ЦП, т.е. тяжелым в использовании ЦП и в основном никаком I/O-usage, то мне нелегко видеть точку использования потоков, так как потоки будут конкурировать по тому же ресурсу, в этом случае ЦП.

, Если Ваш CalculateSmth () использует и ЦП и ввод-вывод, то это могла бы быть точка в использовании поточной обработки.

я полностью соглашаюсь с комментарием к своему ответу. Я сделал ошибочное предположение, что мы говорили о единственном ЦП с одним ядром, но в эти дни у нас есть многоядерные центральные процессоры, мое плохое.

103
задан MrLore 22 December 2015 в 10:46
поделиться

2 ответа

Когда Inherited = true (по умолчанию), это означает, что создаваемый вами атрибут может быть унаследован подклассами класса, украшенного этим атрибутом.

Итак, если вы создать MyUberAttribute с помощью [AttributeUsage (Inherited = true)]

[AttributeUsage (Inherited = True)]
MyUberAttribute : Attribute
{
   string _SpecialName;
   public string SpecialName
   { 
     get { return _SpecialName; }
     set { _SpecialName = value; }
   }
}

Затем использовать атрибут, украсив суперкласс ...

[MyUberAttribute(SpecialName = "Bob")]
class MySuperClass 
{
  public void DoInterestingStuf () { ... }
}

Если мы создадим подкласс MySuperClass, он будет иметь этот атрибут ...

class MySubClass : MySuperClass
{
   ...
}

Затем создайте экземпляр MySubClass ...

MySubClass MySubClassInstance = new MySubClass();

Затем проверьте, есть ли у него атрибут ...

MySubClassInstance <--- теперь имеет MyUberAttribute со значением SpecialName «Bob».

108
ответ дан 24 November 2019 в 04:21
поделиться

Да, именно это и означает. Атрибут

[AttributeUsage(Inherited=true)]
public class FooAttribute : System.Attribute
{
    private string name;

    public FooAttribute(string name)
    {
        this.name = name;
    }

    public override string ToString() { return this.name; }
}

[Foo("hello")]
public class BaseClass {}

public class SubClass : BaseClass {}

// outputs "hello"
Console.WriteLine(typeof(SubClass).GetCustomAttributes(true).First());
14
ответ дан 24 November 2019 в 04:21
поделиться