C# 什么是扩展类?

C# 什么是扩展类?,c#,.net,C#,.net,我的老师让我们调查什么是扩展类,但我似乎在MSDN或谷歌上找不到任何东西。有什么帮助吗?在正式的C#术语中没有“扩展类”这样的东西。它可能意味着一个类定义(这不是什么特别的,它只是一个简单的静态类)。一个具有 扩展方法允许您“添加” 方法在不使用 创建新的派生类型, 重新编译或以其他方式修改 原始类型。扩展方法 是一种特殊的静态方法, 但他们被称为好像他们是 扩展类型上的实例方法。 对于用C#和 VisualBasic中,没有明显的 调用 扩展方法和 实际上是在类型中定义的 你的老师可能也在谈论

我的老师让我们调查什么是扩展类,但我似乎在MSDN或谷歌上找不到任何东西。有什么帮助吗?

在正式的C#术语中没有“扩展类”这样的东西。它可能意味着一个类定义(这不是什么特别的,它只是一个简单的
静态类)。

一个具有

扩展方法允许您“添加” 方法在不使用 创建新的派生类型, 重新编译或以其他方式修改 原始类型。扩展方法 是一种特殊的静态方法, 但他们被称为好像他们是 扩展类型上的实例方法。 对于用C#和 VisualBasic中,没有明显的 调用 扩展方法和 实际上是在类型中定义的


你的老师可能也在谈论…

从技术上讲,“延伸班”并不是什么。在方言中,它可以被某人用来指代设计用于存储的类。扩展方法是用来看起来像类的实例方法的方法,但实际上是静态类中的静态方法,用于增强和封装某些功能。当您试图在无法直接修改的类型上扩展某些功能并向其添加方法时,它们特别有用。此外,它们通常与泛型类型一起使用(特别是在.net 3.5框架中),以使用特定接口提供的方法来扩展功能。

我不知道扩展类是否存在。但扩展方法是否存在。 试试这个

C#中的扩展类可以是子类(继承并向基类型或接口添加更多功能)或静态类

我知道这个问题有点老,但当我读到这个问题时,我想到的一件事是Martin fowler的《重构》一书。在第7章“在对象之间移动特征”中,他描述了一种称为“引入局部扩展”的重构。在那里,他谈到了创建一个扩展类,它只是对象周围的一个子类或包装器。这个扩展类的目的是扩展现有类的功能,如
Date
(Java类
Date
而不是.Net的
DateTime
类,它实际上是密封的)

这里的一些其他答案提到了扩展方法,这似乎是使用重构引入外来方法的另一种方法。我对此不确定,所以我可能弄错了


我认为这本书是在1999年写的,大多数例子都是Java的,所以这可能与.Net没有太大关系,但我想这个概念是通用的。

我能想到的最接近扩展类的东西就是微软的ExceptionExtensions类。

如果在具有该名称的类中创建自己的方法,则可以从Exception对象访问该方法

public static class ExceptionExtensions
{
    public static String myMethod(this Exception ex)
    {
        return ("Hi!");
    }
}
通过以下方式访问它:

catch(Exception ex)
{
    String message = ex.myMethod();
}

你是说扩展方法吗?除非您引用的是派生类,否则不要认为C#中存在扩展类?您确定它是“扩展类”而不是“扩展方法”吗?