Herausfinden welche Methode einer Klasse von welchem Interface stammt

Thomas Darimont

Erfahrenes Mitglied
Hallo,

mit folgendem Beispiel kann man alle Methoden ermitteln die von einem bestimmten Interface gefordert werden:
C#:
using System;
using System.Collections.Generic;
using System.Text;

using System.Reflection;

namespace De.Tutorials.Training
{
    public class GenericsTest
    {
        public static void Main(string[] args)
        {
            PrintInterfaceImplementationDetailsOf(typeof(Operation));
        }

        private static void PrintInterfaceImplementationDetailsOf(Type type)
        {
            Console.WriteLine("Interface implementation details of: {0}", type.FullName);
            foreach (Type interfaceType in type.GetInterfaces())
            {
                Console.WriteLine("{0} provides: ", interfaceType.FullName);
                InterfaceMapping interfaceMapping = type.GetInterfaceMap(interfaceType);
                for (int i = 0; i < interfaceMapping.InterfaceMethods.Length; i++)
                {
                    Console.WriteLine("Interface Method: {0} -> Implementation: {1} TargetType: {2}", 
                        interfaceMapping.InterfaceMethods[i], 
                        interfaceMapping.TargetMethods[i], 
                        interfaceMapping.TargetType.FullName);
                }
            }
        }
    }

    public abstract class Operation : IExtendedOperation
    {
        #region IExtendedOperation Members

        public void ExtendedOperation()
        {
            throw new Exception("The method or operation is not implemented.");
        }

        #endregion

        #region IOperation Members

        void IOperation.Operation()
        {
            throw new Exception("The method or operation is not implemented.");
        }

        #endregion
    }

    public interface IOperation
    {
        void Operation();
    }

    public interface IExtendedOperation : IOperation
    {
        void ExtendedOperation();
    }
}

Ausgabe:
Code:
Interface implementation details of: De.Tutorials.Training.Operation
De.Tutorials.Training.IExtendedOperation provides:
Interface Method: Void ExtendedOperation() -> Implementation: Void ExtendedOperation() TargetType: De.Tutorials.Training.Operation
De.Tutorials.Training.IOperation provides:
Interface Method: Void Operation() -> Implementation: Void De.Tutorials.Training.IOperation.Operation() TargetType: De.Tutorials.Training.Operation
Drücken Sie eine beliebige Taste . . .

Gruß Tom
 
Zurück