首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >动态调用类方法

动态调用类方法
EN

Stack Overflow用户
提问于 2009-12-31 19:00:28
回答 6查看 264关注 0票数 1

编辑:在现实生活中,我没有书本类。这只是一个清楚的例子。真正的问题确实需要反思才能解决。

假设我有一些类:

书,苹果,门。

代码语言:javascript
复制
class Book
{
   ...
   public decimal getPrice()
   {...}
   public string getTitle()
   {...}
   public decimal getAuthor()
   {...}
}

其他班级也一样。

可以从字符串动态调用类方法:

代码语言:javascript
复制
Book myBook = new Book("Title", "Author", 44);

string title = runMethod(myBook, "getTitle");
EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2009-12-31 19:17:43

您可以使用这样的东西,使用反射:

代码语言:javascript
复制
class Program
{
static void Main(string[] args)
{
    var b = new Book("Book Title", 2342);

    Console.WriteLine(CallMethod(b, "GetTitle", "Not Found"));
}

public static K CallMethod<T,K>(T a, string method, K defaultOjb)
{
    var t = a.GetType();

    var mi = t.GetMethod(method);
    if (mi == null) return defaultOjb;

    var ret=mi.Invoke(a, new object[] {});

    return (K) ret;
}
}

public class Book
{
private readonly string _title;
private readonly decimal _price;

public decimal GetPrice()
{
    return _price;
}
public string GetTitle()
{
    return _title;
}

public Book(string title, decimal price)
{
    _title = title;
    _price = price;
}
}
票数 3
EN

Stack Overflow用户

发布于 2009-12-31 19:03:46

你可以通过反射来完成这个任务。

代码语言:javascript
复制
Book myBook = new Book("Title", "Author", 44); 

string title = (string) myBook.GetType().GetMethod("getTitle").Invoke(myBook, null); 
票数 5
EN

Stack Overflow用户

发布于 2009-12-31 19:03:15

查找反射和MethodInfo。我相信这会引导你走上你正在寻找的道路。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1986672

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档