public
class
Baby
{
private
readonly DateTime _birthDay;
public
Baby(DateTime birthDay)
{
_birthDay = birthDay;
}
public
Baby()
{
_birthDay = DateTime.Now;
}
public
string GetBabyInfo(string name, int sex) => $
"姓名:{name} , 出生天数:{ DateTime.Now- _birthDay} ,性别 :{(sex == 1 ? "
男
" : "
女
")}"
;
}
class
Program
{
static
void Main(string[] args)
{
Type targetType = Assembly.GetExecutingAssembly().
GetType
(
"ConsoleApplication1.Baby"
);
MethodInfo methodInfo = targetType.GetMethod(
"GetBabyInfo"
,
new
[] { typeof(string), typeof(int) });
ConstructorInfo constructor = targetType.GetConstructor(
new
[] { typeof(DateTime) });
WithConstructor(methodInfo, constructor);
WithOutConstructor(methodInfo);
Console.ReadKey();
}
static
void WithConstructor(MethodInfo methodInfo, ConstructorInfo constructor)
{
var
func = (Func<DateTime, string, int, string>)DynamicMethodBuilder.BuildDynamicDelegate(methodInfo, constructor);
Console.WriteLine(func(DateTime.Now.AddDays(-100),
"糖墩儿"
, 1));
}
static
void WithOutConstructor(MethodInfo methodInfo)
{
var
func = (Func<string, int, string>)DynamicMethodBuilder.BuildDynamicDelegate(methodInfo);
Console.WriteLine(func(
"糖墩儿"
, 1));
}
}