国产午夜成人免费看片无遮挡_日本免费xxxx色视频_免费人成网上在线观看_黄网址在线永久免费观看

當前位置:雨林木風下載站 > 技術開發教程 > 詳細頁面

動態裝載與運用分類

動態裝載與運用分類

更新時間:2019-07-04 文章作者:未知 信息來源:網絡 閱讀次數:

Reflection提供諸如Microsoft Visual Basic.NET和JScript語言編譯器使用的底層結構來實施隱性后綁定。綁定是定位與某一特定類型相對應的聲明的過程。當這個過程發生在運行的時候,而不是編譯的時候,它被稱為后綁定。Visual Basic.NET使你可以在你的代碼中使用隱性后綁定;VisualBasic.NET編譯器調用helper 方法,使用Reflection獲得對象類型。傳遞給helper 方法的參數 使適當的方法可以在運行時被調用。這些參數是調用方法(對象)的實例,被調用方法的名字(字符串),及傳遞給被調用方法的參數。(一個對象數組)。

在以下代碼例子中, Visual Basic.NET編譯器通過Reflection隱性地 來對一在編譯時不知類型的對象調用方法。HelloWorld 類有一種 PrintHello 方法,可以打印出 "Hello World" 及傳遞給PrintHello 方法的一些文本。本例中PrintHello 方法 調用實際上是Type. InvokeMember ; Visual Basic 代碼 允許PrintHello 方法被調用,仿佛 對象的類型 (helloObj)在編譯時就已經知道了(前期綁定),而不是在運行時(后綁定)。
[Visual Basic]
Imports System
Module Hello
Sub Main()
' Set up variable.
Dim helloObj As Object
' Create the object.
helloObj = new HelloWorld()
' Invoke the print method as if it was early bound
' even though it's really late bound.
helloObj.PrintHello("Visual Basic Late Bound")
End Sub
End Module

自定義綁定
Reflection除了可以隱性地被編譯器用于后綁定,也可以在代碼中顯示使用,來完成后綁定。

common language runtime 支持多種編程語言,這些語言的綁定規則互不相同。在前綁定的情況下,代碼生成器能完全控制綁定。然而,在使用Reflection的后綁定中,綁定必須由自定義綁定控制。Binder類提供成員選擇與調用的自定義控制。

使用自定義綁定, 您可以在運行時裝載assembly,獲得assembly中關于類型的信息,指明您索要的類型,并且調用方法,訪問字段,或類型的屬性。如果在編譯時您不知道對象的類型,該技術就顯得格外有用,比如,當對象類型依賴于用戶輸入時。以下例子中的代碼顯示了在HelloWorld.dll assembly 中,被動態使用Reflection調用的方法,第一個在Visual Basic.NET,第二個在C#中。
[Visual Basic]
' This class is deployed as an assembly consisting Hello World string.
Private m_helloWorld As String = "HelloWorld"
' Default public constructor.
Public Sub New()

End Sub 'New

' Print "Hello World" plus thepassed text.
Public Sub PrintHello(txt As String)
' Output to the Console.
Console.WriteLine((m_helloWorld & "" & txt))
End Sub
End Class

Imports System
Imports System.Reflection
Module VisualBasicLateHello
Sub Main()
' Set up the variables.
Dim assem as System.Reflection.Assembly
Dim obj as Object
Dim helloType as Type
Dim printMethod as MethodInfo
' Load the assembly to use.
assem = System.Reflection.Assembly.Load("HelloWorld")
' Get the type to use from the assembly.
helloType = assem.GetType("HelloWorld")
' Get the method to use from the type.
printMethod = helloType.GetMethod("PrintHello")
' Create an instance of the type.
obj = Activator.CreateInstance(helloType)
' Create an array to hold the arguments.
Dim args(1) as Object
' Set the arguments.
args(0) = "From Visual Basic Late Bound"
' Invoke the method.
printMethod.Invoke(obj, args)
End Sub
End Module


以下為C# 版:
[C#]
// This class is deployed as an assembly consisting of one DLL,
// called HelloWorld.dll.
using System;
public class HelloWorld {
// Constant Hello World string.
private const String m_helloWorld = "Hello World";
// Default public constructor.
public HelloWorld() {
}
// Print "Hello World" plus the passed text.
public void PrintHello(String txt) {
// Output to the Console.
Console.WriteLine(m_helloWorld + " " + txt);
}
}

// Illustrates reflection's late binding functionality.
// Calls the PrintHello method on a dynamically loaded
// and created instance of the HelloWorld class.
using System;
using System.Reflection;
public class CSharpLateHello {
public static void Main() {
// Load the assembly to use.
Assembly assem = Assembly.Load("HelloWorld");
// Get the type to use from the assembly.
Type helloType = assem.GetType("HelloWorld");
// Get the method to call from the type.
MethodInfo printMethod = helloType.GetMethod("PrintHello");
// Create an instance of the HelloWorld class.
Object obj = Activator.CreateInstance(helloType);
// Create the args array.
Object[] args = new Object[1];
// Set the arguments.
args[0] = "From CSharp Late Bound";
// Invoke the PrintHello method.
printMethod.Invoke(obj, args);
}
}


InvokeMember 與 CreateInstance
可以使用Type.InvokeMember來調用某類型成員。各種類的CreateInstance 方法,例如System.Activator 和 System.Reflection.Assembly,是InvokeMember的專用形式,用于生成某類型新的實例。Binder類在這些方法中,被用于重載解析和參數轉換。

以下例子中的代碼顯示了三種可能的參數轉換及成員選擇的組合。在Case1中, 不需要參數轉換或成員選擇。在Case 2中,只需要成員選擇。在Case3中, 只需要參數轉換。
[C#]
public class CustomBinderDriver
{
public static void Main (string[] arguments)
{
Type t = typeof (CustomBinderDriver);
CustomBinder binder = new CustomBinder();
BindingFlags flags = BindingFlags.InvokeMethod|BindingFlags.Instance|
BindingFlags.Public|BindingFlags.Static;

//Case 1. Neither argument coercion nor memberselection is needed.
args = new Object[] {};
t.InvokeMember ("PrintBob", flags,binder, null, args);

//Case 2. Only member selection is needed.
args = new Object[] {42};
t.InvokeMember ("PrintValue", flags,binder, null, args);

//Case 3. Only argument coercion is needed.
args = new Object[] {"5.5"};
t.InvokeMember ("PrintNumber",flags, binder, null, args);
}

public static void PrintBob ()
{
Console.WriteLine ("PrintBob");
}

public static void PrintValue (long value)
{
Console.WriteLine ("PrintValue ({0})",value);
}
public static void PrintValue (String value)
{
Console.WriteLine ("PrintValue\"{0}\")",value);
}

public static void PrintNumber (double value)
{
Console.WriteLine ("PrintNumber ({0})",value);
}
}


當存在多于一個的同名成員時,就需要有重載解析。Binder.BindToMethod 和Binder.BindToField 方法可以用來綁定到一個成員。Binder.BindToMethod也可以通過get 和set 屬性訪問器提供屬性解析。

BindToMethod 返回可被調用的MethodBase. 如無可用的調用則返回null. 如果無法調用,BindToMethod 返回 MethodBase 為 調用或 null。MethodBase返回值無需是match參數之一,盡管事實往往如此。

調用者 也許會想得到ByRef 參數的返回。所以,如果BindTo方法改動過參數數組,Binder 允許客戶使參數數組映射回它原來的表格。為了實現這點,調用者必須確保參數順序不變。當參數由名字傳遞,Binder重新整理參數組,以供調用者察看。

可用成員是指那些在類型或任何基本類型中定義的那些成員。如果指明BindingFlags.NonPublic,任何訪問級別的成員都會在返回中。如果BindingFlags.NonPublic 沒有被指明,binder必須執行訪問規則。當指明Public或 NonPublic 綁定標志, 你必須也指明Instance 或Static 標志, 否則不會有成員返回。

如果只有一個成員與名字對應,就不需要回調,也就完成到這個方法的綁定。Case 1 中的代碼例子表明了這一點:只有一個可用的PrintBob 方法, 所以,不需要回調。

如在可用集中,有多于一個成員。所有這些方法被傳遞給BindTo方法, 再由它選擇適當的方法,并且返回。在 Case 2 中的代碼例子中,有兩種叫做PrintValue的方法。合適的方法取決于對BindToMethod調用。

ChangeType 執行參數轉換, 它把實際參數轉變為選定方法的參數類型。即使類型已經完美匹配,ChangeType也會針對每個參數被調用。

在 Case 3 中的代碼例子中, 值為"5.5"的String類型的一個實際參數以正式參數Double類型被傳遞給方法。要想調用成功,字符串值"5.5"必須被轉變為一個double值。ChangeType 執行了這種轉變。

ChangeType 僅執行無損失轉換, 如下表所示:
Source Type Target Type
Any type Its base type
Any type Interface it implements
Char UInt16, UInt32, Int32, UInt64, Int64, Single, Double
Byte Char, UInt16, Int16, UInt32, Int32, UInt64, Int64, Single, Double
SByte Int16, Int32, Int64, Single, Double
UInt16 UInt32, Int32, UInt64, Int64, Single, Double
Int16 Int32, Int64, Single, Double
UInt32 UInt64, Int64, Single, Double
Int32 Int64, Single, Double
UInt64 Single, Double
Int64 Single, Double
Single Double
Non-reference type Reference type

Type類有Get方法,可使用Binder類型的參數的來解析對某成員的引用。Type.GetConstructor,Type. GetMethod , 和 Type.GetProperty 通過提供某成員的簽名信息來查找該成員。它們調用Binder.SelectMethod和Binder.SelectProperty 以選擇適合方法的簽名信息。

溫馨提示:喜歡本站的話,請收藏一下本站!

本類教程下載

系統下載排行

国产午夜成人免费看片无遮挡_日本免费xxxx色视频_免费人成网上在线观看_黄网址在线永久免费观看

  • <label id="pxtpz"><meter id="pxtpz"></meter></label>
      1. <span id="pxtpz"><optgroup id="pxtpz"></optgroup></span>

        国产精品国产三级国产普通话三级 | 午夜激情久久久| 99久久国产综合精品色伊| 国产精品第一页第二页第三页| 国产精品伊人色| 国产精品毛片久久久久久久| 96av麻豆蜜桃一区二区| 亚洲国产精品麻豆| 2020国产精品自拍| 天堂成人国产精品一区| 国产亚洲一区二区在线观看| 99re热这里只有精品视频| 亚洲成人手机在线| 中文字幕免费在线观看视频一区| 成人国产精品免费观看视频| 一区二区三区高清| 久久亚洲一级片| 色先锋aa成人| 另类专区欧美蜜桃臀第一页| 中文字幕在线观看不卡视频| 91精品婷婷国产综合久久性色| 成人综合在线视频| 日韩精品一二三四| 亚洲欧洲一区二区在线播放| 日韩一区二区影院| 欧美午夜在线观看| 成人一区在线看| 日本aⅴ精品一区二区三区| 亚洲日本免费电影| 日韩一区二区电影在线| 色综合天天综合狠狠| 国产一区二区三区在线观看免费视频 | 日韩欧美综合一区| 91色.com| 北条麻妃国产九九精品视频| 精品一区二区三区在线观看| 亚洲电影你懂得| 亚洲人成伊人成综合网小说| 国产日产欧产精品推荐色 | 国产精品国产三级国产普通话99| 欧美一区二区性放荡片| 色综合色综合色综合| 成人综合激情网| 国产在线观看免费一区| 精品一区二区影视| 美女一区二区视频| 亚州成人在线电影| 一区二区三区欧美视频| 中文字幕佐山爱一区二区免费| 欧美激情一区在线观看| 国产日韩欧美综合在线| 国产偷国产偷精品高清尤物| 久久久综合精品| 久久亚洲综合色| 国产免费久久精品| 久久久国际精品| 中文字幕精品在线不卡| 国产精品久久久久久久久久久免费看 | 精品乱人伦小说| 日韩欧美高清在线| 精品美女一区二区| 久久久久88色偷偷免费| 国产精品久久久久国产精品日日| 久久精品一区二区三区不卡| 亚洲国产精品高清| 中文字幕一区二区三区四区| 中文字幕在线观看不卡视频| 亚洲免费av网站| 婷婷成人综合网| 蜜臂av日日欢夜夜爽一区| 久久国产综合精品| 国产精品影视在线| 色婷婷精品久久二区二区蜜臂av| 欧美性猛交xxxx乱大交退制版| 在线亚洲精品福利网址导航| 欧美日韩国产123区| 日韩你懂的电影在线观看| 久久久久88色偷偷免费| 亚洲欧美激情一区二区| 午夜婷婷国产麻豆精品| 韩国精品主播一区二区在线观看| 粉嫩av一区二区三区粉嫩| 欧美在线短视频| 精品理论电影在线观看| 国产精品第四页| 免费在线看一区| 99久久精品国产麻豆演员表| 欧美一区二区三区不卡| 欧美激情在线免费观看| 午夜久久久久久久久| 国产乱色国产精品免费视频| 欧美视频在线一区二区三区 | 欧美色综合影院| 精品久久久久久久久久久院品网| 亚洲婷婷综合色高清在线| 免费xxxx性欧美18vr| 99国产精品视频免费观看| 日韩午夜av电影| 亚洲视频网在线直播| 韩国av一区二区| 欧美日韩免费高清一区色橹橹| 欧美一区二区网站| 亚洲免费观看在线视频| 国产一区二区三区在线观看精品| 91精品福利视频| 久久这里只精品最新地址| 日日夜夜精品视频天天综合网| 成人网在线免费视频| 欧美喷水一区二区| 亚洲精品高清在线观看| 成人在线综合网| 精品久久久网站| 欧美a级一区二区| 欧美性感一区二区三区| 中文字幕一区二区三区四区不卡| 国产自产2019最新不卡| 日韩亚洲欧美在线| 青青草97国产精品免费观看无弹窗版| 日本精品一区二区三区高清 | 亚洲激情网站免费观看| 国产成人无遮挡在线视频| 欧美一卡2卡三卡4卡5免费| 亚洲一级在线观看| 在线观看日韩电影| 一区二区三区四区中文字幕| 94色蜜桃网一区二区三区| 国产精品久久久久久久久晋中| 国产精品亚洲第一| 国产欧美视频一区二区三区| 国产精品99久| 欧美国产丝袜视频| 国产99久久久精品| 国产精品精品国产色婷婷| 丁香桃色午夜亚洲一区二区三区| www久久久久| 成人深夜视频在线观看| 中文字幕电影一区| av午夜一区麻豆| 亚洲欧美日韩精品久久久久| 99久久夜色精品国产网站| 国产精品区一区二区三区| 99久久精品免费精品国产| 自拍偷在线精品自拍偷无码专区| 色综合久久88色综合天天6 | 成人av在线影院| 中文字幕一区av| 一本一道久久a久久精品综合蜜臀| 亚洲天堂久久久久久久| 欧洲一区在线观看| 久久福利视频一区二区| 国产精品三级视频| 在线观看av一区| 蜜乳av一区二区三区| 国产精品麻豆视频| 欧美日韩美女一区二区| 蜜臀va亚洲va欧美va天堂| 国产午夜精品在线观看| 欧美在线制服丝袜| 久久66热偷产精品| 中文字幕在线不卡国产视频| 欧美日韩成人综合天天影院| 国产一区二三区| 亚洲综合激情另类小说区| 日韩精品一区二区三区中文不卡| 成人小视频在线观看| 首页国产欧美久久| 亚洲视频电影在线| 2023国产精华国产精品| 在线精品视频一区二区三四| 日本三级韩国三级欧美三级| 国产女人18水真多18精品一级做| 欧美三区免费完整视频在线观看| 黑人巨大精品欧美一区| 一区二区三区四区国产精品| 久久新电视剧免费观看| 欧美综合欧美视频| 成人一区二区三区中文字幕| 五月婷婷欧美视频| 国产精品久久久久四虎| 欧美sm美女调教| 欧美日韩一区二区电影| 国产不卡在线播放| 美女尤物国产一区| 亚洲一区精品在线| 国产精品电影一区二区三区| 精品伦理精品一区| 欧美乱妇15p| 一本大道久久a久久综合婷婷 | av中文字幕一区| 精品一区二区av| 日韩精品91亚洲二区在线观看| 国产精品久久久久天堂| 久久久综合精品| 精品国产乱码久久久久久蜜臀| 91免费在线看| 不卡高清视频专区| 国产成人在线免费观看| 国内精品在线播放| 久久99精品久久久| 狠狠色狠狠色合久久伊人|