3

例如,我想向integer(ie, Int32) 添加一个方法,这将使我能够执行以下操作:

int myInt = 32;
myInt.HelloWorld();

可以说,您可以编写一个采用 , 的方法,而不是坚持执行上述操作,integer如下HelloWorld(integer)所示,更容易:

int myInt = 32;
HelloWorld(myInt);

但是,我只是好奇这是否可能。如果属实,那么向知名类添加一些其他功能是一种好的编程实践吗?

PS:我试图创建另一个继承自的类Int32,但不能从密封类型“int”派生。

4

6 回答 6

10

您可以为int32.

   public static class Int32Extensions
   {
       public static void HelloWorld(this int value) 
       {
         // do something
       }
   }

只要记住using类所在的命名空间。

于 2012-08-10T15:23:23.530 回答
3

你在扩展方法之后。他们在面向对象编程方面没有任何问题,因为您无法访问私有变量,也无法以任何方式改变对象的行为。

它是您准确描述的唯一语法糖。

于 2012-08-10T15:23:59.987 回答
3

我想你提到了扩展方法的扩展方法编程指南

于 2012-08-10T15:25:00.063 回答
2

问:向知名类添加一些其他功能是一种好的编程实践吗?

这种类型的讨论确实属于“程序员”。

请看一下这个关于程序员的讨论,它有很多关于使用扩展方法的哲学观点:

https://softwareengineering.stackexchange.com/questions/77427/why-arent-extension-methods-being-used-more-extensively-in-net-bcl

还:

https://softwareengineering.stackexchange.com/questions/41740/when-to-use-abstract-classes-instead-of-interfaces-and-extension-methods-in-c?lq=1

于 2012-08-10T15:28:25.137 回答
1

使用扩展方法

static class Program
{
    static void Main(string[] args)
    {
        2.HelloWorld();
    }

    public static void HelloWorld(this int value)
    {
        Console.WriteLine(value);
    }
}
于 2012-08-10T15:26:34.720 回答
1

您可以使用这样的扩展方法:

public static class IntExtensions
{
    public static string HelloWorld(this int i)
    {
        return "Hello world";
    }
}
于 2012-08-10T15:26:41.603 回答