Attribute.GetHashCode メソッドとは? わかりやすく解説

Weblio 辞書 > コンピュータ > .NET Framework クラス ライブラリ リファレンス > Attribute.GetHashCode メソッドの意味・解説 

Attribute.GetHashCode メソッド

このインスタンスハッシュ コード返します

名前空間: System
アセンブリ: mscorlib (mscorlib.dll 内)
構文構文

使用例使用例

Attributeコンテキストでの GetHashCode使用方法次のコード例示します

Imports System
Imports System.Reflection
Imports System.Collections

Module HashCodeVB

    ' Visual Basic requires that the AttributeUsage be specified.
    ' A custom attribute to allow two authors per method.
    <AttributeUsage(AttributeTargets.All.Method)> _
    Public Class AuthorsAttribute
        Inherits Attribute

        Public Sub New(ByVal
 name1 As String, ByVal
 name2 As String)
            myAuthorName1 = name1
            myAuthorName2 = name2
        End Sub

        Protected myAuthorName1 As String
        Protected myAuthorName2 As String

        Public Property AuthorName1() As
 String
            Get
                Return myAuthorName1
            End Get
            Set(ByVal Value As
 String)
                myAuthorName1 = AuthorName1
            End Set
        End Property

        Public Property AuthorName2() As
 String
            Get
                Return myAuthorName2
            End Get
            Set(ByVal Value As
 String)
                myAuthorName2 = AuthorName2
            End Set
        End Property

        ' Use the hash code of the string objects and Xor them together.
        Public Overrides Function
 GetHashCode() As Integer
            Return myAuthorName1.GetHashCode() Xor
 myAuthorName2.GetHashCode()
        End Function

    End Class

    ' Provide the author names for each method of the class.
    Public Class TestClass
        <Authors("Immanuel Kant", "Lao
 Tzu")> _
        Public Sub Method1()
        End Sub

        <Authors("Jean-Paul Sartre", "Friedrich
 Nietzsche")> _
        Public Sub Method2()
        End Sub

        <Authors("Immanuel Kant", "Lao
 Tzu")> _
        Public Sub Method3()
        End Sub

        <Authors("Jean-Paul Sartre", "Friedrich
 Nietzsche")> _
        Public Sub Method4()
        End Sub

        <Authors("Immanuel Kant", "Friedrich
 Nietzsche")> _
        Public Sub Method5()
        End Sub
    End Class

    Sub Main()
        ' Get the class type to access its metadata.
        Dim clsType As Type = GetType(TestClass)
        ' Use a hash table to store the hash codes and methods.
        Dim hTable As Hashtable = New
 Hashtable()
        Dim mInfo As MethodInfo
        ' Iterate through all the methods of the class.
        For Each mInfo In
 clsType.GetMethods()
            ' Get the unique hash code for these authors.
            Dim attr As Attribute = Attribute.GetCustomAttribute(mInfo,
 GetType(AuthorsAttribute))
            If Not attr Is
 Nothing Then
                Dim authAttr As AuthorsAttribute
 = CType(attr, _
                    AuthorsAttribute)
                Dim hCode As Integer
 = authAttr.GetHashCode()
                ' See if it's already been added to the hash table.
                If hTable.Contains(hCode) Then
                    Dim o As Object
 = hTable(hCode)
                    If TypeOf o Is
 ArrayList Then
                        ' If so, retrieve the array using the Item syntax.
                        Dim al As ArrayList
 = CType(o, ArrayList)
                        ' Add the method to the array list.
                        al.Add(mInfo.Name)
                        ' Put the edited array list back into the table.
                        hTable(hCode) = al
                    End If
                ' This is the first occurrence of this hash code.
                Else
                    ' Create a new array list.
                    Dim al As ArrayList = New
 ArrayList()
                    ' Add the method name as the first entry.
                    al.Add(mInfo.Name)
                    ' Add the new hash code and array list to the table.
                    hTable.Add(hCode, al)
                End If
            End If
        Next

        ' Get the hash table's enumerator and iterate through the table.
        Dim dictEnum As IDictionaryEnumerator
 = hTable.GetEnumerator
        While dictEnum.MoveNext()
            ' Get the array list for this iteration.
            Dim o As Object
 = dictEnum.Value
            If TypeOf o Is
 ArrayList Then
                Dim al As ArrayList = CType(o,
 ArrayList)
                Dim i As Integer
                ' Access each element of the array.
                for i = 0 to al.Count - 1
                    ' For the first element, retrieve the author names.
                    If i = 0 Then
                        Dim methodName as Object
 = al(i)
                        ' Get the metadata for the method.
                        Dim mInfo2 As MethodInfo
 = _
                            clsType.GetMethod(CType(methodName, String))
                        ' Retrieve the Authors attribute again.
                        Dim attr As Attribute
 = Attribute.GetCustomAttribute( _
                            mInfo2, GetType(AuthorsAttribute))
                        If Not attr Is
 Nothing And _
                            TypeOf attr Is
 AuthorsAttribute Then
                            ' Convert the attribute to access its data.
                            Dim authAttr As
 AuthorsAttribute = _
                                CType(attr, AuthorsAttribute)
                            ' Display the author's names.
                            Console.WriteLine("Authors: {0}, {1}",
 _
                                authattr.AuthorName1, authattr.AuthorName2)
                        Else
                            Console.WriteLine("The authors could
 not " + _
                                "be retrieved.")
                        End If
                    End If
                    ' Display each method authored by this team.
                    Console.WriteLine(al(i))
                Next i
                Console.WriteLine("")
            End If
        End While
    End Sub
End Module
using System;
using System.Reflection;
using System.Collections;

namespace HashCodeCS 
{
    // A custom attribute to allow two authors per method.
    public class AuthorsAttribute : Attribute
 
    {
        public AuthorsAttribute(string name1,
 string name2) 
        {
            authorName1 = name1;
            authorName2 = name2;
        }

        protected string authorName1;
        protected string authorName2;
    
        public string AuthorName1 
        {
            get { return authorName1; }
            set { authorName1 = AuthorName1; }
        }

        public string AuthorName2 
        {
            get { return authorName2; }
            set { authorName2 = AuthorName2; }
        }

        // Use the hash code of the string objects and xor them together.
        public override int GetHashCode() 
        {
            return authorName1.GetHashCode() ^ authorName2.GetHashCode();
        }
    }

    // Provide the author names for each method of the class.
    public class TestClass 
    {
        [Authors("Immanuel Kant", "Lao Tzu")]
        public void Method1()
        {}

        [Authors("Jean-Paul Sartre", "Friedrich Nietzsche")]
        public void Method2()
        {}

        [Authors("Immanuel Kant", "Lao Tzu")]
        public void Method3()
        {}

        [Authors("Jean-Paul Sartre", "Friedrich Nietzsche")]
        public void Method4()
        {}

        [Authors("Immanuel Kant", "Friedrich Nietzsche")]
        public void Method5()
        {}
    }

    class DemoClass 
    {
        static void Main(string[]
 args) 
        {
            // Get the class type to access its metadata.
            Type clsType = typeof(TestClass);

            // Use a hash table to store the hash codes and methods.
            Hashtable hTable = new Hashtable();

            // Iterate through all the methods of the class.
            foreach(MethodInfo mInfo in clsType.GetMethods())
 
            {
                // Get the Authors attribute for the method if it exists.
                AuthorsAttribute authAttr = 
                    (AuthorsAttribute)Attribute.GetCustomAttribute(
                    mInfo, typeof(AuthorsAttribute));
                if (authAttr != null) 
                {
                    // Get the unique hash code for these authors.
                    int hCode = authAttr.GetHashCode();

                    // See if it's already been added to the hash table.
                    if (hTable.Contains(hCode)) 
                    {
                        // If so, retrieve the array using the Item
 syntax.
                        ArrayList al = (ArrayList)hTable[hCode];
                        // Add the method to the array list.
                        al.Add(mInfo.Name);
                        // Put the edited array list back into the table.
                        hTable[hCode] = al;
                    }

                        // This is the first occurrence of this hash
 code.
                    else 
                    {
                        // Create a new array list.
                        ArrayList al = new ArrayList();
                        // Add the method name as the first entry.
                        al.Add(mInfo.Name);
                        // Add the new hash code and array list to the
 table.
                        hTable.Add(hCode, al);
                    }
                }
            }

            // Get the hash table's enumerator and iterate through the
 table.
            IDictionaryEnumerator dictEnum = hTable.GetEnumerator();
            while (dictEnum.MoveNext()) 
            {
                // Get the array list for this iteration.
                ArrayList al = (ArrayList)dictEnum.Value;
                // Access each element of the array.
                for (int i=0; i<al.Count;
 i++) 
                {
                    // For the first element, retrieve the author names.
                    if (i == 0) 
                    {
                        // Get the metadata for the method.
                        MethodInfo mInfo = clsType.GetMethod((String)al[i]);
                        // Retrieve the Authors attribute again.
                        AuthorsAttribute authAttr = 
                            (AuthorsAttribute)Attribute.GetCustomAttribute(
                            mInfo, typeof(AuthorsAttribute));
                        // Display the authors names.
                        if (authAttr != null)
                            Console.WriteLine("Authors: {0}, {1}", 
                                authAttr.AuthorName1, authAttr.AuthorName2);
                        else
                            Console.WriteLine("The authors could not be retrieved.");
                    }
                    // Display each method authored by this team.
                    Console.WriteLine(al[i]);
                }
                Console.WriteLine("");
            }
        }
    }
}

using namespace System;
using namespace System::Reflection;
using namespace System::Collections;

// A custom attribute to allow two authors per method.
public ref class AuthorsAttribute: public
 Attribute
{
public:
   AuthorsAttribute( String^ name1, String^ name2 )
   {
      authorName1 = name1;
      authorName2 = name2;
   }

protected:
   String^ authorName1;
   String^ authorName2;

public:
   property String^ AuthorName1 
   {
      String^ get()
      {
         return authorName1;
      }

      void set( String^ value )
      {
         authorName1 = value;
      }
   }

   property String^ AuthorName2 
   {
      String^ get()
      {
         return authorName2;
      }

      void set( String^ value )
      {
         authorName2 = value;
      }
   }

   // Use the hash code of the string objects and xor them together.
   virtual int GetHashCode() override
   {
      return authorName1->GetHashCode() ^ authorName2->GetHashCode();
   }
};

// Provide the author names for each method of the class.
public ref class TestClass
{
public:

   [Authors("Immanuel Kant","Lao Tzu")]
   void Method1(){}

   [Authors("Jean-Paul Sartre","Friedrich Nietzsche")]
   void Method2(){}

   [Authors("Immanuel Kant","Lao Tzu")]
   void Method3(){}

   [Authors("Jean-Paul Sartre","Friedrich Nietzsche")]
   void Method4(){}

   [Authors("Immanuel Kant","Friedrich Nietzsche")]
   void Method5(){}
};

int main()
{
   // Get the class type to access its metadata.
   Type^ clsType = TestClass::typeid;

   // Use a hash table to store the hash codes and methods.
   Hashtable^ hTable = gcnew Hashtable;

   // Iterate through all the methods of the class.
   IEnumerator^ myEnum = clsType->GetMethods()->GetEnumerator();
   while ( myEnum->MoveNext() )
   {
      MethodInfo^ mInfo = safe_cast<MethodInfo^>(myEnum->Current);

      // Get the Authors attribute for the method if it exists.
      AuthorsAttribute^ authAttr = dynamic_cast<AuthorsAttribute^>(Attribute::GetCustomAttribute(
 mInfo, AuthorsAttribute::typeid ));
      if ( authAttr != nullptr )
      {
         // Get the unique hash code for these authors.
         int hCode = authAttr->GetHashCode();

         // See if it's already been added to the hash table.
         if ( hTable->Contains( hCode ) )
         {
            // If so, retrieve the array using the Item syntax.
            ArrayList^ al = dynamic_cast<ArrayList^>(hTable[ hCode ]);

            // Add the method to the array list.
            al->Add( mInfo->Name );

            // Put the edited array list back into the table.
            hTable[ hCode ] = al;
         }
         // This is the first occurrence of this hash code.
         else
         {
            // Create a new array list.
            ArrayList^ al = gcnew ArrayList;

            // Add the method name as the first entry.
            al->Add( mInfo->Name );

            // Add the new hash code and array list to the table.
            hTable->Add( hCode, al );
         }
      }
   }
   
   // Get the hash table's enumerator and iterate through the table.
   IDictionaryEnumerator^ dictEnum = hTable->GetEnumerator();
   while ( dictEnum->MoveNext() )
   {
      // Get the array list for this iteration.
      ArrayList^ al = dynamic_cast<ArrayList^>(dictEnum->Value);
      
      // Access each element of the array.
      for ( int i = 0; i < al->Count;
 i++ )
      {
         // For the first element, retrieve the author names.
         if ( i == 0 )
         {
            // Get the metadata for the method.
            MethodInfo^ mInfo = clsType->GetMethod( dynamic_cast<String^>(al[
 i ]) );

            // Retrieve the Authors attribute again.
            AuthorsAttribute^ authAttr = dynamic_cast<AuthorsAttribute^>(Attribute::GetCustomAttribute(
 mInfo, AuthorsAttribute::typeid ));

            // Display the authors names.
            if ( authAttr != nullptr )
                        Console::WriteLine( "Authors: {0}, {1}", authAttr->AuthorName1,
 authAttr->AuthorName2 );
            else
                        Console::WriteLine( "The authors could not be retrieved."
 );
         }
         // Display each method authored by this team.
         Console::WriteLine( al[ i ] );
      }
      Console::WriteLine( "" );
   }
}
package HashCodeJSL; 

import System.*;
import System.Reflection.*;
import System.Collections.*;

// A custom attribute to allow two authors per method.
/** @attribute System.AttributeUsageAttribute(AttributeTargets.Method)
 */
public class AuthorsAttribute extends Attribute
{
    public AuthorsAttribute(String name1, String name2)
    {
        authorName1 = name1;
        authorName2 = name2;
    } //AuthorsAttribute

    protected String authorName1;
    protected String authorName2;

    /** @property 
     */
    public String get_AuthorName1()
    {
        return authorName1;
    } //get_AuthorName1

    /** @property 
     */
    public void set_AuthorName1(String value)
    {
        authorName1 = value;
    } //set_AuthorName1

    /** @property 
     */
    public String get_AuthorName2()
    {
        return authorName2;
    } //get_AuthorName2

    /** @property 
     */
    public void set_AuthorName2(String value)
    {
        authorName2 = value;
    } //set_AuthorName2

    // Use the hash code of the string objects and xor them together.
    public int GetHashCode()
    {
        return authorName1.GetHashCode() ^ authorName2.GetHashCode();
    } //GetHashCode
} //AuthorsAttribute

// Provide the author names for each method of the class.
public class TestClass
{
    /** @attribute Authors("Immanuel Kant", "Lao Tzu")
     */
    public void Method1()
    {
    } //Method1

    /** @attribute Authors("Jean-Paul Sartre", "Friedrich Nietzsche")
     */
    public void Method2()
    {
    } //Method2

    /** @attribute Authors("Immanuel Kant", "Lao Tzu")
     */
    public void Method3()
    {
    } //Method3

    /** @attribute Authors("Jean-Paul Sartre", "Friedrich Nietzsche")
     */
    public void Method4()
    {
    } //Method4

    /** @attribute Authors("Immanuel Kant", "Friedrich Nietzsche")
     */
    public void Method5()
    {
    } //Method5
} //TestClass

class DemoClass
{
    public static void main(String[]
 args)
    {
        // Get the class type to access its metadata.
        Type clsType = TestClass.class.ToType();

        // Use a hash table to store the hash codes and methods.
        Hashtable hTable = new Hashtable();

        // Iterate through all the methods of the class.           
 
        for (int iCtr = 0; iCtr < clsType.GetMethods().length;
 iCtr++) {
            MethodInfo mInfo = (MethodInfo)clsType.GetMethods()[iCtr];

            // Get the Authors attribute for the method if it exists.
            AuthorsAttribute authAttr = (AuthorsAttribute)Attribute.
                GetCustomAttribute(mInfo, AuthorsAttribute.class.ToType());

            if (authAttr != null) {
                // Get the unique hash code for these authors.
                int hCode = authAttr.GetHashCode();

                // See if it's already been added to the hash table.
                if (hTable.Contains((Int32)hCode)) {
                    // If so, retrieve the array using the Item syntax.
                    ArrayList al = (ArrayList)hTable.get_Item((Int32)hCode);

                    // Add the method to the array list.
                    al.Add(mInfo.get_Name());

                    // Put the edited array list back into the table.
                    hTable.set_Item((Int32)hCode, al);
                }
                // This is the first occurrence of this hash code.
                else {
                    // Create a new array list.
                    ArrayList al = new ArrayList();

                    // Add the method name as the first entry.
                    al.Add(mInfo.get_Name());

                    // Add the new hash code and array list to the table.
                    hTable.Add((Int32)hCode, al);
                }
            }
        }

        // Get the hash table's enumerator and iterate through the table.
        IDictionaryEnumerator dictEnum = hTable.GetEnumerator();

        while (dictEnum.MoveNext()) {
            // Get the array list for this iteration.
            ArrayList al = (ArrayList)dictEnum.get_Value();

            // Access each element of the array.
            for (int i = 0; i < al.get_Count();
 i++) {
                // For the first element, retrieve the author names.
                if (i == 0) {
                    // Get the metadata for the method.
                    MethodInfo mInfo = clsType.GetMethod((String)al.
                        get_Item(i));

                    // Retrieve the Authors attribute again.
                    AuthorsAttribute authAttr = (AuthorsAttribute)Attribute.
                        GetCustomAttribute(mInfo,
                        AuthorsAttribute.class.ToType());

                    // Display the authors names.
                    if (authAttr != null) {
                        Console.WriteLine("Authors: {0}, {1}",authAttr.
                            get_AuthorName1(), authAttr.get_AuthorName2());
                    }
                    else {
                        Console.WriteLine("The authors could not be " 
                            + "retrieved.");
                    }
                }

                // Display each method authored by this team.
                Console.WriteLine(al.get_Item(i));
            }
            Console.WriteLine("");
        }
    } //main
} //DemoClass
import System;
import System.Reflection;
import System.Collections;

package HashCodeJS {
    // A custom attribute to allow 2 authors per method.
    public AttributeUsage(AttributeTargets.Method) class
 AuthorsAttribute extends Attribute {
        public function AuthorsAttribute(name1
 : String, name2 : String) {
            authorName1 = name1;
            authorName2 = name2;
        }

        protected var authorName1 : String;
        protected var authorName2 : String;
    
        public function get
 AuthorName1() : String {
            return authorName1; 
                }

                public function set
 AuthorName1(AuthorName1 : String) {
            authorName1 = AuthorName1; 
                }

        public function get
 AuthorName2() : String{
            return authorName2; 
                }

                public function set
 AuthorName2(AuthorName2 : String) {
            authorName2 = AuthorName2; 
        }

        // Use the hash code of the string objects and xor them together.
        public override function GetHashCode()
 : int {
            return authorName1.GetHashCode() ^ authorName2.GetHashCode();
        }
    }

    // Provide the author names for each method of the class.
    public class TestClass {
        public AuthorsAttribute("Immanuel Kant", "Lao
 Tzu")
        function Method1()
        {}

        public AuthorsAttribute("Jean-Paul Sartre",
 "Friedrich Nietzche")
        function Method2()
        {}

        public AuthorsAttribute("Immanuel Kant", "Lao
 Tzu")
        function Method3()
        {}

        public AuthorsAttribute("Jean-Paul Sartre",
 "Friedrich Nietzche")
        function Method4()
        {}

        public AuthorsAttribute("Immanuel Kant", "Friedrich
 Nietzche")
        function Method5()
        {}
    }

    class DemoClass {
        static function Main() {
            // Get the class type to access its metadata.
                        var testclass : TestClass = new
 TestClass();
            var clsType : Type = testclass.GetType();

            // Use a hash table to store the hash codes and methods.
            var hTable : Hashtable = new Hashtable();

            // Iterate through all the methods of the class.
                        var mInfo : MethodInfo[] = clsType.GetMethods()
            for (var i : int
 = 0; i < mInfo.length; i++) {
                // Get the Authors attribute for the method if it exists.
                var attr : Attribute = Attribute.GetCustomAttribute(mInfo[i],
 AuthorsAttribute);
                if (attr != null) {
                    // Get the unique hash code for these authors.
                    var hCode : int = attr.GetHashCode();

                    // See if it's already been added to the hash table.
                    if (hTable.Contains(hCode)) {
                        // If so, retrieve the array import the Item
 syntax.
                        var al : ArrayList = ArrayList(hTable[hCode]);
                        // Add the method to the array list.
                        al.Add(mInfo[i].Name);
                        // Put the edited array list back into the table.
                        hTable[hCode] = al;
                    }

                    // This is the first occurrence of this hash code.
                    else {
                        // Create a new array list.
                        var al2 : ArrayList = new
 ArrayList();
                        // Add the method name as the first entry.
                        al2.Add(mInfo[i].Name);
                        // Add the new hash code and array list to the
 table.
                        hTable.Add(hCode, al2);
                    }
                }
            }

            // Get the hash table's enumerator and iterate through the
 table.
            var dictEnum : IDictionaryEnumerator = hTable.GetEnumerator();
            while (dictEnum.MoveNext()) {
                // Get the array list for this iteration.
                var al3 : ArrayList = ArrayList(dictEnum.Value);
                // Access each element of the array.
                for (var j : int
 = 0; j < al3.Count; j++) {
                    // For the first element, retrieve the author names.
                    if (j == 0) {
                        // Get the metadata for the method.
                        var mInfo2 : MethodInfo = clsType.GetMethod(String(al3[j]));
                        // Retrieve the Authors attribute again.
                        var attr2 : Attribute = 
                                                      Attribute.GetCustomAttribute(mInfo2,
 
                                                                                
   AuthorsAttribute);
                        // Display the authors names.
                        if (attr2 != null)
                            Console.WriteLine("Authors: {0}, {1}", 
                                AuthorsAttribute(attr2).AuthorName1, 
                                                                AuthorsAttribute(attr2).AuthorName2);
                        else
                            Console.WriteLine("The authors could not be retrieved.");
                    }
                    // Display each method authored by this team.
                    Console.WriteLine(al3[j]);
                }
                Console.WriteLine("");
            }
        }
    }
}

/*
 *  Output:
 * Authors: Jean-Paul Sartre, Friedrich Nietzche
 * Method4
 * Method2
 * 
 * Authors: Immanuel Kant, Lao Tzu
 * Method3
 * Method1
 *
 * Authors: Immanuel Kant, Friedrich Nietzche
 * Method5
 */

HashCodeJS.DemoClass.Main();
プラットフォームプラットフォーム
バージョン情報バージョン情報
参照参照



英和和英テキスト翻訳>> Weblio翻訳
英語⇒日本語日本語⇒英語
  

辞書ショートカット

すべての辞書の索引

「Attribute.GetHashCode メソッド」の関連用語

Attribute.GetHashCode メソッドのお隣キーワード
検索ランキング

   

英語⇒日本語
日本語⇒英語
   



Attribute.GetHashCode メソッドのページの著作権
Weblio 辞書 情報提供元は 参加元一覧 にて確認できます。

   
日本マイクロソフト株式会社日本マイクロソフト株式会社
© 2024 Microsoft.All rights reserved.

©2024 GRAS Group, Inc.RSS