C#方法签名

网上有人说方法签名包含方法返回类型,也有人说不包含。到底什么是方法签名呢?

Visual C# 2010在线帮助,方法(C# 编程指南)是这样说的:

方法签名

通过指定方法的访问级别(例如 public 或private)、可选修饰符(例如abstract 或sealed)、返回值、名称和任何方法参数,可以在或 结构中声明方法。

这些部分统称为方法的“签名”。

为进行方法重载,方法的返回类型不是方法签名的一部分。

但是,在确定委托和委托所指向方法之间的兼容性时,返回类型是方法签名的一部分。

Visual C# 2010在线帮助,委托(C# 编程指南)是这样说的:

委托是一种定义方法签名的类型。

当实例化委托时,您可以将其实例与任何具有兼容签名(注:这里所说的签名包含返回类型)的方法相关联。

您可以通过委托实例调用方法。

委托用于将方法作为参数传递给其他方法。

事件处理程序就是通过委托调用的方法。

在方法重载的上下文中,方法的签名不包括返回值。

但在委托的上下文中,签名的确包括返回值。

换句话说,方法和委托必须具有相同的返回值。

例:

class Program
    {
        static void Main(string[] args)
        {

// Instantiate the delegate.
          Del handler1 = new Del(DelegateMethod1);

Del handler2 = new Del(DelegateMethod2);     //error,方法的返回类型与委托的返回类型不一致

// Call the delegate.
  
          handler1("Hello World");
          handler2("Hello World");
            
            Console.ReadKey();

}

// Create a method for a delegate.
  
      public static void DelegateMethod1(string message)
      {
          System.Console.WriteLine(message);
      }

public static string DelegateMethod2(string message)
      {
          System.Console.WriteLine(message);
          return "ok";
      }

public delegate void Del(string message);
 
    }

也有人这样描述:

在C#中,方法、实例构造函数、索引器和运算符是由它们的签名来刻画的:

·        方法签名由方法的名称和它的每一个形参(按从左到右的顺序)的类型和种类(值、引用或输出)组成。需注意的是,方法签名既不包含返回类型,也不包含 params修饰符(它可用于最右边的参数)。

·        实例构造函数签名由它的每一个形参(按从左到右的顺序)的类型和种类(值、引用或输出)组成。具体说来,实例构造函数的签名不包含可为最右边的参数指定的 params修饰符。

·        索引器签名由它的每一个形参(按从左到右的顺序)的类型组成。具体说来,索引器的签名不包含元素类型。

·        运算符签名由运算符的名称和它的每一个形参(按从左到右的顺序)的类型组成。具体说来,运算符的签名不包含结果类型。

签名是对类、结构和接口的成员实施重载的机制:

·        方法重载允许类、结构或接口用同一个名称声明多个方法,条件是它们的签名在该类、结构或接口中是唯一的。

·        实例构造函数重载允许类或结构声明多个实例构造函数,条件是它们的签名在该类或结构中是唯一的。

·        索引器重载允许类、结构或接口声明多个索引器,条件是它们的签名在该类、结构或接口中是唯一的。

·        运算符重载允许类或结构用同一名称声明多个运算符,条件是它们的签名在该类或结构中是唯一的。

扩展:对象拥有自己的值(C#中的字段),而类可以描述同族对象的操作和属性。类的操作是一个过程或者函数,而方法就是类操作的具体实现。操作的名字就是方法签名。

时间: 2024-08-30 15:34:46

C#方法签名的相关文章

安卓实战开发之JNI入门及高效的配置(android studio一键生成.h,so及方法签名)

前言 以前也讲过NDK开发,但是开始是抱着好玩的感觉去开始的,然后呢会helloWord就觉得大大的满足,现在静下来想这NDK开发到底是干什么呢? NDK开发,其实是为了项目需要调用底层的一些C/C++的一些东西:另外就是为了效率更加高效些但是在java与C相互调用时平白又增大了开销(其实效率不见得有所提高),然后呢,基于安全性的考虑也是为了防止代码被反编译我们为了安全起见,使用C语言来编写这些重要的部分来增大系统的安全性,最后呢生成so库便于给人提供方便. 好了,我们来看一下qq的结构,我们就

Java 方法签名

方法的名字和參数列表成为方法的签名.注意,方法签名不包含方法的返回类型.本文通过測试理解參数列表的真正含义,以及在继承中重写方法时方法的返回值与父类中方法的返回值应该有如何的关系. 这里有三个辅助类: package methodsign; public class Ancestor { } package methodsign; public class Parent extends Ancestor { } package methodsign; public class Other { }

C# 方法签名以及怎样的两个方法才算是不同的方法

方法签名由方法名称和一个参数列表(方法的参数个数.顺序和类型)组成. 注意:方法的签名并不包括方法的返回值和修饰符. 在C#中,同一个类中的两个或两个以上的方法可以相同的名字,只要他们的参数列表声明不同即可.在这种情况下,该方法就被称为重载(overload),这个过程称为方法重载(method overloading).方法重载是C#最有用的特性之一. 当一个方法被调用时,C#用方法签名确定调用哪一个方法.因此,每个重载方法的参数列表必须是不同的.虽然每个重载方法可以有不同的返回类型,但是返回

Android中关于JNI 的学习(二)对于JNI方法名,数据类型和方法签名的一些认识

处理特征数据 及 代码 本文地址: http://blog.csdn.net/caroline_wendy/article/details/26240241 输入文件:  1. 归一化后的特征文件, 第1列是标签, 其余列是特征; 2. 特征最大值向量文件: 前3列是标准格式, 其余列是最大值; 输出文件: 1. 符合SVM训练数据的特征格式; 2. Mat存储的标准XML文件; 代码: /* 处理特征数据程序 By C.L.Wang 数据格式: 特征数据: 第1列是标签, 其余列是特征; 最大

android NDK 学习笔记(5)---ndk 方法签名显示

c++要回到java方法需要的脚本 选中要显示方法签名的的activity,然后选中javap

java方法签名

方法的名字和参数列表称为方法的签名. 方法名 (参数列表(方法参数的顺序和类型)) 如下:方法中,方法名字:quaryAll.参数列表:( String  a , int  b ) public  int  quaryAll( String a , int b ) { return 0; } 方法的返回类型不是方法签名的一部分. 返回类型 : int ;

Android有关JNI 学习(两)为JNI方法名称,数据类型和方法签名的一些知识

我们知道,使用javah产生c/c++当在头文件,将java定义 native 功能,以产生相应jni层功能,如下面: /* * Class: com_lms_jni_JniTest * Method: getTestString * Signature: ()Ljava/lang/String; */ JNIEXPORT jstring JNICALL Java_com_lms_jni_JniTest_getTestString (JNIEnv *, jobject); 我们能够看到方法名是以

缓存篇~第七回 Redis实现基于方法签名的数据集缓存(可控更新,分布式数据缓存)

返回目录 本篇文章可以说是第六回 Microsoft.Practices.EnterpriseLibrary.Caching实现基于方法签名的数据集缓存(可控更新,WEB端数据缓存)的续篇,事实上,有EnterpriseLibrary.Caching也只是实现缓存持久化的一种方式,而Redis做为成熟的分布式存储中间件来说,实现这个数据集缓存功能显得更加得心应手,也更加满足大型网站的设计规则.(在多web服务器时(web端实现负载均衡,反向代理),EnterpriseLibrary.Cachin

第四十条:谨慎设计方法签名

先明确:方法签名由方法名称和一个参数列表(方法的参数的顺序和类型)组成,不包括返回值类型. 谨慎的选择方法的名称. 不要对于追求提供便利的方法. 避免过长的参数列表.目标是四个参数,或者更少. 有三种方法可以缩短过长的参数列表: 1.把过长参数列表的方法分解成多个方法,每个方法只需要这些参数的一个子集. 2.创建辅助类,用来保存参数的分组,这些成员类一般是静态成员类.如果一个频繁出现的参数序列可以被看作是代表了某个独特的实体,则建议 使用这种方法. 3.从对象构建到方法使用都使用Builder模

【代码优化】方法签名及参数检查

参数检查: 绝大多数方法的构造器对于传递给它的参数值会有某些限制.例如,索引值必须是非负数,对象不能 为null等等. 如果传递无效参数给方法,在执行前没对参数进行检查,该方法可能在处理过程中失败,并且产生令 人费解的异常.更糟的是,该方法可以正常返回数据.但是会得到一个错误的结果,你还认为是正确的, 没发现其中的倪端. 所以对于方法参数的检查是有必要的. 常见的几个错误,IllegalArgumentException,IndexOutOfBoundsException和NullPointEx