如何创建无限属性?

时间:2016-11-14 15:38:15

标签: c# class properties

在C#中,字符串具有无限属性,如此

string a = "";
a.ToString().Length.ToString().ToUpper().ToLower().ToString()....

如何创建这样的

ClassName a = new ClassName();
a.text("message").title("hello").icon("user");

谢谢,它有效

    public class Modal
    {
        public Modal()
        {

        }

        private string Date = null;
        private string Text = null;
        private string Title = null;
        private string Icon = null;
        private string Subtitle = null;
        private string Confirm = "ok";
        private string Cancel = "cancel";
        private string Type = "warning";

        public Modal text(string text) { this.Text = text; return this; }

        public Modal title(string title) { this.Title = title; return this; }

        public Modal icon(string icon) { this.Icon = icon; return this; }

        public Modal subtitle(string subtitle)
        {
            this.Subtitle = subtitle;
            return this;
        }

        public Modal confirm(string confirm) { this.Confirm = confirm; return this; }

        public Modal cancel(string cancel) { this.Cancel = cancel; return this; }

        public Modal type(string type) { this.Type = type; return this; }

        public void show(System.Web.UI.Page Page)
        {
            StringBuilder s = new StringBuilder();
            s.Append("{'date':'" + (DateTime.UtcNow.Ticks - 621355968000000000).ToString() + "','text':'" + Text + "','title':'" + Title + "','icon':'" + Icon + "','subtitle':'" + Subtitle + "','confirm':'" + Confirm + "','cancel':'" + Cancel + "','type':'" + Type + "'}");
            string _script = "showModal(" + s.ToString() + ");";
            ScriptManager.RegisterStartupScript(Page, Page.GetType(), (DateTime.UtcNow.Ticks - 621355968000000000).ToString(), _script, true);
        }

    }
Modal m = new Modal();
m.text("this is text").title("this is title").icon("fa-car").type("danger").show(this);

result

1 个答案:

答案 0 :(得分:2)

string上的每个方法都只返回string。 (好吧,差不多。你那里有一个.Length是不正确的。)如果你从你的方法中返回你的对象,你就可以实现相同的概念。 (在某些情况下,这可以称为“流畅的语法”,尽管string示例并不一定如此。)

例如,假设您的.Title()方法是这样的:

class ClassName
{
    //...

    public ClassName Title(string title)
    {
        this.Title = title;
        return this;
    }
}

然后,只要你调用someObj.Title("some string"),该方法就会返回对象本身:

var someObj = new ClassName();
someObj.Title("some title").SomeOtherOperation();

它不是“无限”,它只是一个返回调用它的相同类型的方法。它可以返回本身或该类型的任何实例。当你这样做时,一定要注意你正在构建的界面,因为你可能会意外地创建相当不直观的东西。 (流畅的链条会对原始物体产生意想不到的副作用,或者不会对原始物体产生预期的效果。)