Type.FindInterfaces(TypeFilter, Object) Metod
Definition
Viktigt
En del information gäller för förhandsversionen av en produkt och kan komma att ändras avsevärt innan produkten blir allmänt tillgänglig. Microsoft lämnar inga garantier, uttryckliga eller underförstådda, avseende informationen som visas här.
public:
virtual cli::array <Type ^> ^ FindInterfaces(System::Reflection::TypeFilter ^ filter, System::Object ^ filterCriteria);
[System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.Interfaces)]
public virtual Type[] FindInterfaces(System.Reflection.TypeFilter filter, object? filterCriteria);
public virtual Type[] FindInterfaces(System.Reflection.TypeFilter filter, object? filterCriteria);
public virtual Type[] FindInterfaces(System.Reflection.TypeFilter filter, object filterCriteria);
[<System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.Interfaces)>]
abstract member FindInterfaces : System.Reflection.TypeFilter * obj -> Type[]
override this.FindInterfaces : System.Reflection.TypeFilter * obj -> Type[]
abstract member FindInterfaces : System.Reflection.TypeFilter * obj -> Type[]
override this.FindInterfaces : System.Reflection.TypeFilter * obj -> Type[]
Public Overridable Function FindInterfaces (filter As TypeFilter, filterCriteria As Object) As Type()
Parametrar
- filter
- TypeFilter
Ombudet som jämför gränssnitten med filterCriteria.
- filterCriteria
- Object
Sökvillkoren som avgör om ett gränssnitt ska ingå i den returnerade matrisen.
Returer
En matris med Type objekt som representerar en filtrerad lista över de gränssnitt som implementerats eller ärvts av den aktuella Type, eller en tom matris om inga gränssnitt som matchar filtret implementeras eller ärvs av den aktuella Type.
Implementeringar
- Attribut
Undantag
filter är null.
En statisk initierare anropas och utlöser ett undantag.
Exempel
I följande exempel hittar du det angivna gränssnittet som implementerats eller ärvts av den angivna typen och visar sedan gränssnittsnamnen.
using System;
using System.Xml;
using System.Reflection;
public class MyFindInterfacesSample
{
public static void Main()
{
try
{
XmlDocument myXMLDoc = new XmlDocument();
myXMLDoc.LoadXml("<book genre='novel' ISBN='1-861001-57-5'>" +
"<title>Pride And Prejudice</title>" + "</book>");
Type myType = myXMLDoc.GetType();
// Specify the TypeFilter delegate that compares the
// interfaces against filter criteria.
TypeFilter myFilter = new TypeFilter(MyInterfaceFilter);
String[] myInterfaceList = new String[2]
{"System.Collections.IEnumerable",
"System.Collections.ICollection"};
for(int index=0; index < myInterfaceList.Length; index++)
{
Type[] myInterfaces = myType.FindInterfaces(myFilter,
myInterfaceList[index]);
if (myInterfaces.Length > 0)
{
Console.WriteLine("\n{0} implements the interface {1}.",
myType, myInterfaceList[index]);
for(int j =0;j < myInterfaces.Length;j++)
Console.WriteLine("Interfaces supported: {0}.",
myInterfaces[j].ToString());
}
else
Console.WriteLine(
"\n{0} does not implement the interface {1}.",
myType,myInterfaceList[index]);
}
}
catch(ArgumentNullException e)
{
Console.WriteLine("ArgumentNullException: " + e.Message);
}
catch(TargetInvocationException e)
{
Console.WriteLine("TargetInvocationException: " + e.Message);
}
catch(Exception e)
{
Console.WriteLine("Exception: " + e.Message);
}
}
public static bool MyInterfaceFilter(Type typeObj,Object criteriaObj)
{
if(typeObj.ToString() == criteriaObj.ToString())
return true;
else
return false;
}
}
open System
open System.Xml
open System.Reflection
let myInterfaceFilter (typeObj: Type) (criteriaObj: obj) =
string typeObj = string criteriaObj
try
let myXMLDoc = XmlDocument()
myXMLDoc.LoadXml("<book genre='novel' ISBN='1-861001-57-5'>" + "<title>Pride And Prejudice</title>" + "</book>")
let myType = myXMLDoc.GetType()
// Specify the TypeFilter delegate that compares the
// interfaces against filter criteria.
let myFilter = TypeFilter myInterfaceFilter
let myInterfaceList =
[ "System.Collections.IEnumerable"
"System.Collections.ICollection" ]
for i in myInterfaceList do
let myInterfaces = myType.FindInterfaces(myFilter, i)
if myInterfaces.Length > 0 then
printfn $"\n{myType} implements the interface {i}."
for j in myInterfaces do
printfn $"Interfaces supported: {j}."
else
printfn $"\n{myType} does not implement the interface {i}."
with
| :? ArgumentNullException as e ->
printfn $"ArgumentNullException: {e.Message}"
| :? TargetInvocationException as e ->
printfn $"TargetInvocationException: {e.Message}"
| e ->
printfn $"Exception: {e.Message}"
Imports System.Xml
Imports System.Reflection
Public Class MyFindInterfacesSample
Public Shared Sub Main()
Try
Dim myXMLDoc As New XmlDocument()
myXMLDoc.LoadXml("<book genre='novel' ISBN='1-861001-57-5'>" _
& "<title>Pride And Prejudice</title>" & "</book>")
Dim myType As Type = myXMLDoc.GetType()
' Specify the TypeFilter delegate that compares the
' interfaces against filter criteria.
Dim myFilter As New TypeFilter(AddressOf MyInterfaceFilter)
Dim myInterfaceList() As String = _
{"System.Collections.IEnumerable", _
"System.Collections.ICollection"}
Dim index As Integer
For index = 0 To myInterfaceList.Length - 1
Dim myInterfaces As Type() = _
myType.FindInterfaces(myFilter, myInterfaceList(index))
If myInterfaces.Length > 0 Then
Console.WriteLine(ControlChars.Cr & _
"{0} implements the interface {1}.", _
myType, myInterfaceList(index))
Dim j As Integer
For j = 0 To myInterfaces.Length - 1
Console.WriteLine("Interfaces supported: {0}", _
myInterfaces(j).ToString())
Next j
Else
Console.WriteLine(ControlChars.Cr & _
"{0} does not implement the interface {1}.", _
myType, myInterfaceList(index))
End If
Next index
Catch e As ArgumentNullException
Console.WriteLine("ArgumentNullException: " & e.Message)
Catch e As TargetInvocationException
Console.WriteLine("TargetInvocationException: " & e.Message)
Catch e As Exception
Console.WriteLine("Exception: " & e.Message)
End Try
End Sub
Public Shared Function MyInterfaceFilter(ByVal typeObj As Type, _
ByVal criteriaObj As [Object]) As Boolean
If typeObj.ToString() = criteriaObj.ToString() Then
Return True
Else
Return False
End If
End Function 'MyInterfaceFilter
End Class
Kommentarer
Den här metoden kan åsidosättas av en härledd klass.
De Module.FilterTypeName ombud och Module.FilterTypeNameIgnoreCase som tillhandahålls av System.Reflection.Module klassen kan också användas i stället för ombudet System.Reflection.TypeFilter .
Alla gränssnitt som implementeras av den här klassen beaktas under sökningen, oavsett om de deklareras av en basklass eller den här klassen själv.
Den här metoden söker i basklasshierarkin och returnerar vart och ett av de matchande gränssnitt som varje klass implementerar samt alla matchande gränssnitt som vart och ett av dessa gränssnitt implementerar (det vill: den transitiva stängningen av matchande gränssnitt returneras). Inga duplicerade gränssnitt returneras.
Om den aktuella Type representerar en typparameter i definitionen av en generisk typ eller allmän metod söker FindInterfaces du igenom alla gränssnitt som deklareras i begränsningarna för typparametern och alla gränssnitt som ärvs via de gränssnitt som deklareras i begränsningarna. Om den aktuella Type representerar ett typargument av allmän typ söker FindInterfaces du igenom alla gränssnitt som implementerats av typen, oavsett om de matchar begränsningarna eller inte.
Note
FindInterfaces kan returnera generiska gränssnitt, även på typer som inte är generiska. En icke-generisk typ kan till exempel implementera IEnumerable<int> (IEnumerable(Of Integer) i Visual Basic).