我怎么能在c#中做到这一点

时间:2011-02-28 07:10:37

标签: c# frameworks

我想建立一个函数调用样式与c#样式不同的框架

像实例一样创建

Documment doc= new Document("required param is here");

doc("otherinfo").Dothis(); 

dothis函数根据用户在创建新实例时传递的信息以及他们传递后者的其他信息进行调用。

这就像jQuery。比如$("#goo").length

这可以在c#

中执行此操作

8 个答案:

答案 0 :(得分:1)

如果没有对C#进行一些语法更改,我不相信你所要求的是可能的。

答案 1 :(得分:1)

这几乎听起来像你想要蜷缩,但对于一个班级来说:

private Func<string,Document> CurryNewDocument(string first)
{
    return second => new Document(first, second);
}


var factory = CurryNewDocument("required param is here");

Document doc = factory("other info");
doc.DoThis();

如果不需要以这种方式进行创作,请查看Delegates。委托允许您将与特定方法签名匹配的方法分配给变量。实际上,上面的Func<string,Document>是一个通用委托。

答案 2 :(得分:1)

我不相信你能得到那种确切的语法,但你可以非常接近:

Document doc = Document.Generator("required parameter");
doc("params").DoThis();

Document必须是一个委托类型,它返回一个封装参数的帮助器类型。

Document doc = new Document("required parameter");
doc["params"].DoThis();

Document是一个普通的类,它带有一个返回辅助类型的默认索引器。

答案 3 :(得分:1)

在C#中,索引器具有obj[args]语法,因此您可以编写如下内容:

public SomeTypeOfYours this[string query]
{ get { return ...(implementation)... } }

然后来电者可以访问doc["whatever"].SomeMethod(...)SomeMethod上定义了SomeTypeOfYoursnew Document("abc")的字符串只是一个构造函数参数,所以:

public Document(string paramName) {...}

答案 4 :(得分:0)

嗯...

//class called document
    public class document
    {
    //constructor for the class
    public document(string s)
    {

    }

    public void dothis()
    {
    //dothis method.
    }
    }

Try that?

答案 5 :(得分:0)

你需要调用doc的函数,doc(“second”)是doc.get(“second”)的顺序无效的东西.dothis();可能有效,它取决于“文档”对象中可用的函数。

答案 6 :(得分:0)

我认为扩展方法在这种情况下是可能的,但不是很确定!

答案 7 :(得分:0)

也许你正试图通过它的框架实现JavaScript提供的功能,但是使用C#,你将无法做到这一点。

即使C#的当前实现允许它,在区分什么是函数调用和什么是对象重新实例化时会有某种模糊性。

doc("second")

会含糊不清。