当前位置:  开发笔记 > 编程语言 > 正文

如何向属性添加方法?

如何解决《如何向属性添加方法?》经验,为你挑选了3个好方法。

假设我创建了一个带有属性的类:

public class User
{
   private string _userID;

   public string UserID
   {
      get { return _userID; }
      set { _userID = value; }
   }
}

我必须如何处理类和属性才能将方法附加到UserID属性,例如使用"dot"语法围绕用户ID生成Xml的方法:

User u = new User();
u.UserID = "Mike";
string xml = u.UserID.ToXml();

我可以弄清楚如何编写一个方法来将Xml标记放在UserID的值周围,我想要的部分就是如何使用"dot"语法使该方法与属性一起使用.


所有这些答案都很有用,感谢大家的贡献.事实上,我标记为"被接受"的答案正是我所寻求的.我很欣赏扩展方法的注意事项(在此之前我从未听说过),当然在某些情况下将扩展方法应用于所有字符串可能会有问题,但在这种情况下我肯定想应用这个方法ToXml()到类中的所有字符串属性.正是医生所要求的.我对XmlSerialization非常熟悉,但在这种情况下需要避免它出于各种原因.



1> Gavin Miller..:

有两种方法:

您正在操作的对象/值必须具有该方法(例如,当您控制对象定义时).

public class UserIDObject
{
   public string ToXML() {}
}

public class User
{
   private UserIDObject _userID;

   public UserIDObject UserID
   {
      get { return _userID; }
      set { _userID = value; }
   }
}

User u = new User();
u.UserID = = new UserIDObject("Mike");
string xml = u.UserID.ToXml();

或者,您可以为对象实现扩展方法(MSDN).Geeks with blogs有一个很好的扩展方法教程,如果你运行的是VS2008,它们可以应用于.NET 2.0.

public static class MyMethods
{
    public static string ToXML(this string s) { }
} 

扩展方法是您想要大量加权的东西,因为扩展方法适用于该类类型的所有对象.(IE.我希望所有字符串都能调用.ToXML()吗?)



2> Ben S..:

你可以:

    将_userID更改为自定义类,包装字符串并添加所需的方法.

    为字符串类创建扩展方法(不推荐).这将影响所有字符串对象



3> Joel Coehoor..:

您必须将该方法添加到属性的类型.在这种情况下,UserID是一个字符串,这意味着将其添加到字符串类型并使其可以从所有字符串访问.我不确定这是个好主意,但如果你真的想要这样做:

public static class StringUtils
{
    public string ToXmlElement(this string s, string elementName)
    {
       return string.Format("<{0}>{1}", elementName, s);
    }
}

这与您的函数签名不完全匹配,但它更适合附加到更大的字符串类.唯一的另一种选择是使用不同的底层类型来保存您的UserID,也许是一个隐式转换为字符串的自定义类.

最后,如果您只是尝试以通用方式将用户类编写为Xml,请查看System.Xml.Serialization命名空间.然后你可以像这样标记你的类并使用XmlSerializer实例来读或写类.

[Serializable]
public class User
{
   private string _userID;

   [XmlElement()]
   public string UserID
   {
      get { return _userID; }
      set { _userID = value; }
   }
}

推荐阅读
小色米虫_524
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有