2

私はC#のカスタム属性で遊んでみました。

このシナリオの一部として、次のシナリオを検討してください。ハッシュする文字列を提供し、カスタム属性を使用してハッシュ アルゴリズムを指定するクライアント クラスがあります。

私はこれにたどり着くことができましたが、カスタム属性値を取得する方法に行き詰まりました。

class HashAlgorithmAttribute : Attribute
{
    private string hashAlgorithm;

    public HashAlgorithmAttribute(string hashChoice)
    {
        this.hashAlgorithm= hashChoice;
    }
}

[HashAlgorithm("XTEA")]
class ClientClass
{
    public static string GetstringToBeHashed()
    {
        return "testString";
    }
}

class ServerClass
{
    public void GetHashingAlgorithm()
    {
        var stringToBeHashed = ClientClass.GetstringToBeHashed();

        ///object[] hashingMethod = typeof(HashAlgorithm).GetCustomAttributes(typeof(HashAlgorithm), false);

    }
}
4

1 に答える 1

2

属性クラスのモックアップ例を使用:

[AttributeUsage(AttributeTargets.All, Inherited = false, AllowMultiple = true)]
sealed class HashAlgorithmAttribute : Attribute
{
    readonly string algorithm;

    public HashAlgorithmAttribute(string algorithm)
    {
        this.algorithm = algorithm;
    }

    public string Algorithm
    {
        get { return algorithm; }
    }
}

そしてテストクラス:

[HashAlgorithm("XTEA")]
class Test
{

}

値を取得するには:

var attribute = typeof(Test).GetCustomAttributes(true)
     .FirstOrDefault(a => a.GetType() == typeof(HashAlgorithmAttribute));
var algorithm = "";

if (attribute != null)
{
    algorithm = ((HashAlgorithmAttribute)attribute).Algorithm;
}

Console.WriteLine(algorithm); //XTEA
于 2013-09-13T13:19:06.917 に答える