【问题标题】:How can I overload method with ExpandoObject?如何使用 ExpandoObject 重载方法?
【发布时间】:2013-03-25 07:58:43
【问题描述】:

我有以下 expando 对象

 dynamic person = new ExpandoObject();
        person.FirstName = " FirstName ";
        person.SecondName = " FirstName ";
        person.FullName = person.FirstName + person.SecondName;
        person.BirthDate = new DateTime(1990, 1, 1);

        person.CalcAge = (Func<int>)
            (() => DateTime.Now.Year - person.BirthDate.Year);

我定义了 CalcAge 方法来计算年龄.. 我想添加具有如下参数的重载方法

person.CalcAge = (Func<DateTime, int>)
            ((DateTime date) => date.Year - person.BirthDate.Year);

如何使用 ExpandoObject 实现它,我可以在其中执行以下操作?

int age1 = person.CalcAge();
MessageBox.Show(age1.ToString());

int age2 = person.CalcAge2(new DateTime(1980, 1, 1));
MessageBox.Show(age2.ToString());

【问题讨论】:

  • 以后,请以文本的形式添加代码,而不是截图。
  • @Jon 我现在做到了.. 谢谢
  • CalcAge 的计算错误:(

标签: .net c#-4.0 dynamic expandoobject


【解决方案1】:

我不相信你可以。我强烈建议您创建一个新的 named 类型。看起来您知道要创建的所有属性和方法 - 所以只需创建一个 Person 类型。 ExpandoObject在某些场景下很有用,但不要指望它能够应付一切。

如果您真的想要一个具有此功能的动态对象,则需要从 DynamicObject 派生一个类 - 这样您可以实现重载,如果您愿意(通过拦截方法调用)。

【讨论】:

  • 乔恩斯基特!我知道这是一篇旧帖子,我希望你能看到这个:-) 你是否知道一个库,它有类似 ExpandoObject 并允许重载方法的库?如果我自己实现这个,我应该如何实现方法解析(假设我想模仿 C# 的行为)?谢谢。
  • @AK_:不,我什么都不知道,恐怕。实现 C# 重载规则将是hard - 那里有很多复杂的东西。
猜你喜欢
  • 2013-03-26
  • 2012-04-29
  • 1970-01-01
  • 2010-09-30
  • 2013-10-05
  • 2010-11-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多