成员类上的C#调用方法

时间:2011-02-18 10:09:59

标签: c#

我想做那样的事情:

public class MyClass
{
    public String varA{ get; set; }
    public String[] varB{ get; set; }

    //.....
    public ?? string ToHtml()
    {
        //return HTML value
    }
}

public class Run()
{
    MyClass c = new Myclass();
    c.varA = "Toto";
    c.varB = new string[] { "foo", "bar" };

    string a = c.varA.ToHtml() // -> "<p>Toto</p>";
    string b = c.varB.ToHtml() // -> "<ul><li>foo</li><li>bar</li></ul>";
}

怎么做?

编辑:我更改了Run()

6 个答案:

答案 0 :(得分:3)

在String类上创建一个扩展方法,该方法返回该字符串的HTML表示(或任何ToHtml()应该执行的操作)。

public static class StringExtensions
{
   public static string ToHtml ( this string target )
   {
       // TODO : 
   }
}

答案 1 :(得分:1)

除非为字符串和数组定义ToHtml()扩展方法,否则不能以这种方式调用它(在字段本身上)。请参阅其他答案,了解如何实现扩展方法。

适用于MyClass的更简单的替代方法是使方法的两个重载分别接受字符串和字符串数组作为参数,然后传递它们:

public string ToHtml(string arg)
{
    //return HTML value
}

public string ToHtml(string[] argAsArray)
{
    //return HTML value
}

然后像这样打电话给他们:

string a = c.ToHtml(c.varA);
string b = c.ToHtml(c.varB);

答案 2 :(得分:1)

您要做的是向string类添加辅助方法。它被称为扩展方法,它必须遵守某些规则:

  • 必须在第一个参数
  • 上使用this
  • 必须是静态的
  • 必须是静态类

public static class HtmlStringHelper
{
  public static string ToHtml(this string s)
  {
    // Add you logic here
    return (s);
  }
}

答案 3 :(得分:1)

我想你可以使用扩展方法(对于字符串和字符串[]),但是你不需要MyClass的ToHtml()方法(因为逻辑将驻留在扩展方法)。

编辑:我应该注意,调用成员方法通常被认为是一种不好的做法。如果没有更多的信息,我很难想象MyClass应该做什么,但是你可能希望在课堂上控制班级成员。另一种方法是为MyClass创建一个ToHtmlA()和ToHtmlB()方法。

答案 4 :(得分:1)

这是使用扩展方法实现场景的一种方法。虽然正如其他人所说,在MyClass中保持逻辑将字符串转换为HTML是有意义的,在某些情况下使用这种方法可能是有意义的。

public class MyClass
{
    public String varA{ get; set; }
    public String[] varB{ get; set; }           
}

public static class MyExtensions {
    public static string ToHtml(this string input, string format)
    {
        return string.Format(format, input);
    }

    public static string ToHtml(this string input)
    {
        return ToHtml(input,"<p>{0}</p>");
    }

    public static string ToHtml(this IEnumerable<string> input, string wrapperformat, string elementformat)
    {
        string body= input
                        .Select(s => string.Format(elementformat,s))
                        .Aggregate((a,b)=> a+b);
        return string.Format(wrapperformat,body);
    }

    public static string ToHtml(this IEnumerable<string> input)
    {
        return ToHtml(input,"<ul>{0}</ul>","<li>{0}</li>");         
    }
}

答案 5 :(得分:0)

如果您更改ToHtml以接受值:

public static string ToHtml(string a)
{
    // your code here - obviously not returning ""
    return "";
}

然后你可以这样称呼它:

MyClass c = new MyClass();
c.varA = "some text";
c.varA = MyClass.ToHtml(c.varA);

但是,我可能会拒绝您所需要的。