有時候需要通過反射以及動態(tài)調(diào)用的辦法去調(diào)用已知的實例的方法,感覺還是挺巧妙的。以下主要記錄通過反射以及動態(tài)的調(diào)用方法。文章來源:http://www.zghlxwxcb.cn/news/detail-729222.html
public class Program
{
static void Main(string[] args)
{
IPerson person = new Peter();
try
{
System.Console.WriteLine("================反射機(jī)制===============");
var p = person.GetType().GetMethod("WriteGirlFirendName");
object[] a = new object[] { "beatiful", 21 };
var r = p.Invoke(person, a);//帶參數(shù)及返回值的
System.Console.WriteLine(r);
p = person.GetType().GetMethod("Write");
p.Invoke(person, null);//無參數(shù)和返回值的
System.Console.WriteLine("================動態(tài)機(jī)制===============");
dynamic pp = person;
var rr = pp.WriteGirlFirendName("girl", 20);//帶參數(shù)返回值的
System.Console.WriteLine(rr);
pp.Write();//無參數(shù)和返回值的
}
catch (Exception ex)
{
System.Console.WriteLine(ex.Message);
}
System.Console.ReadLine();
}
public static void play()
{
string path = @"F:\Kwmusic\KwDownload\song\Alarm.wav";
SoundPlayer player = new SoundPlayer(path);
player.PlayLooping();
Thread.Sleep(10000);
System.Console.WriteLine("輸入1停止,2重放");
System.Console.ReadLine();
player.Stop();
}
}
public interface IPerson
{
void GetName();
}
public class Peter : IPerson
{
public void GetName()
{
System.Console.WriteLine("name");
}
//帶參數(shù)
public int WriteGirlFirendName(string name,int age)
{
System.Console.WriteLine($"{name} {age}");
return age;
}
//不帶參數(shù)的
public void Write()
{
System.Console.WriteLine("不帶參數(shù)方法。");
}
}
運行結(jié)果如下圖所示:
總結(jié):在已知方法的情況下,還是動態(tài)調(diào)用比較方便,但是要注意異常處理,畢竟這屬于特殊情況,編譯執(zhí)行前不會給提示的。文章來源地址http://www.zghlxwxcb.cn/news/detail-729222.html
到了這里,關(guān)于C# 通過反射以及動態(tài)調(diào)用方法的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!