C#中类方法的一些资料.doc_第1页
C#中类方法的一些资料.doc_第2页
C#中类方法的一些资料.doc_第3页
C#中类方法的一些资料.doc_第4页
C#中类方法的一些资料.doc_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

比如:PUBLIC STRING _NEW() 这一类有带类型的就有返回值 PUBLIC VOID _NEW() 这一类返回类型定义为空(VOID)的就没有返回值有返回值的方法需要你返回一个值出去,如:Public String _New() String XXX = 100; return XXX; /需要你返回的值 若方法类型为(Void)就无需return. 摘要: c#中类的方法定义,参数,使用,重载,方法的格式方法可以向调用方返回值。如果返回类型(方法名称前列出的类型)不是void,则方法可以使用return关键字来返回值。如果语句中return关键 方法的格式定义方法的基本格式如下:方法的访问属性 返回类型方法名(参数列表)方法的具体实现;类中的功能大多数放在方法中实现。下面的代码实现了UpdateDatabase方法的定义:public void UpdateDatabase(DataSet ds)/具体实现代码;方法的返回值方法可以向调用方返回值。如果返回类型(方法名称前列出的类型)不是void,则方法可以使用return关键字来返回值。如果语句中return关键字的后面是与返回类型匹配的值,则该语句将该值返回给方法调用方。return关键字还可以停止方法的执行。如果返回类型为void,则可使用没有值的return语句来停止方法的执行。如果没有return关键字,方法执行到代码块末尾时即会停止。具有非 void返回类型的方法才能使用return关键字返回值。例如,下面的两个方法使用return关键字来返回整数,代码如下:public class VoidTestpublic int AddNum(int num1 ,int num2)return num1 + num2;public int SquareNum(int num)return num * num;方法的参数如果方法要更改数值,有时需要传递值给方法并从方法获得返回值。下面是传递参数时的4种情况。(1)值参数:声明时不带修饰符的参数是值参数,一个值参数相当于一个局部变量,初始值来自该方法调用时提供的相应参数。在方法内对值参数的操作不会改变传给方法时变量的值,因为将值类型传递给方法时,传递的是副本而不是对象本身。由于它们是副本,因此对参数所做的任何更改都不会在调用方法内部反映出来。之所以叫做值类型,是因为传递的是对象的副本而不是对象本身,传递的是值,而不是同一个对象。(2)引用参数:如果要传递原值并修改它,使用引用参数就非常方便。因为引用参数传递了一个变量给方法而不仅仅传递它的值,所以对参数的操作会影响原值。在传递时变量必须被初始化。(3)输出参数:在传递参数前加out关键字即可将该传递参数设作一个输出参数。输出参数用来返回一个结果。它和引用参数的区别是不必先初始化变量。例如:static void Method(out int i)(4)参数数组:参数数组必须用params修饰词明确指定。在方法的参数列表中只允许出现一个参数数组,而且在方法同时具有固定参数和参数数组的情况下,参数数组必须放在整个参数列表的最后,并且参数数组只允许是一维数组。方法的重载方法重载是指调用同一方法名,但使用不同数据类型的参数或不同的次序。只要类中有两个以上的同名方法,且使用的参数类型或者个数不同,编译器就可以判断在哪种情况下调用哪种方法。下面的代码实现了MethodTest方法的重载:public int MethodTest(int i, int j)public int MethodTest(int i)public string MethodTest(string s)4.1. 方法的声明方法声明格式:atttributes method-modifiers return-type member-name(formal-parameter-list) method-body,在方法声明中,至少应包括方法名称、修饰符和参数类型,返回值和参数名则不是必须的。需要注意的是,方法名不应与同一个类中其它方法同名,也不能与类中的其它成员名称相同。方法的修饰符可以是:l newl publicl protectedl internall privatel staticl virtuall sealedl overridel abstractl extern对于使用了abstract和extern修饰符的方法,方法体仅仅只有一个简单的分号。 C#在方法的执行部分通过return语句得到返回值。4.2. 方法中的参数C#中方法的参数有四种类型:l 值参数,不含任何修饰符l 引用型参数,以ref修饰符l 输出参数,以out修饰符l 数组型参数,以params修饰符声明1. usingSystem;2. usingSystem.Collections.Generic;3. usingSystem.Linq;4. usingSystem.Text;5. 6. namespaceCash7. 8. classProgram9. 10. staticvoidMain(stringargs)11. 12. (newProgram().run();13. 14. /writeFee(calculate(dailyRate,workDay); 15. /对于非static方法,若想像上面这样直接调用则会报以下错 16. /Error1Anobjectreferenceisrequired 17. /forthenon-staticfield,method,or 18. /propertyCash.Program.readDouble(string) 19. 20. printfOtherthing(staticmethodiscalled.);/static方法可直接调用 21. Programprogram=newProgram();/非static方法需要先创建一个对象 22. /然后用对象调用 23. program.printSomething(non-staticmenthodiscalled.);24. 25. 26. publicvoidrun()27. 28. doubledailyRate=readDouble(pleaseenteryourrate:);29. intworkDay=readInt(pleaseenteryourdaysofworking:);30. writeFee(calculate(dailyRate,workDay);31. 32. 33. privatevoidwriteFee(doublep)34. 35. Console.WriteLine(Theconsultantsfeeis:0,p*1.6);36. 37. 38. privatedoublecalculate(doubledailyRate,intworkDay)39. 40. returndailyRate*workDay;41. 42. 43. privateintreadInt(stringp)44. 45. Console.WriteLine(p);46. stringa=Console.ReadLine();/读取输入的字符(readline读取的 47. /字符都是string类型) 48. returnint.Parse(a);/把a转换为int类型,并返回 49. 50. 51. privatedoublereadDouble(stringp)52. 53. Console.WriteLine(p);54. stringline=Console.ReadLine();55. returndouble.Parse(line);56. 57. 58. privatevoidprintSomething(stringa)/non-staticmethod 59. 60. Console.WriteLine(a);61. 62. 63. privatestaticvoidprintfOtherthing(stringa)/staticmethod 64. 65. Console.WriteLine(a);66. 67. 68. 以上所有方法都是在 Program 类里面定义和使用的。输入8和9后运行,结果如下图所示:定义和调用扩展方法 定义一个静态类以包含扩展方法。该类必须对客户端代码可见。 将该扩展方法实现为静态方法,并使其至少具有与包含类相同的可见性。 该方法的第一个参数指定方法所操作的类型;该参数必须以 this 修饰符开头。 在调用代码中,添加一条 using 指令以指定包含扩展方法类的命名空间。 按照与调用类型上的实例方法一样的方式调用扩展方法。请注意,第一个参数不是由调用代码指定的,因为它表示正应用运算符的类型,并且编译器已经知道对象的类型。 您只需通过 n 为这两个形参提供实参。自己 定义的扩展方法 namespace lcctest public static class test / / / / / / / / public static string TestHelper(this object sd, string id, string value, string test) return 成功; 复制代码 调用 using lcctest;/引用命名空间namespace MvcApplication1.Controllers public class test public void test1() string sd; sd.TestHelper(); 复制代码C# 实现和调用自定义扩展方法C# 编程指南如何:实现和调用自定义扩展方法 更新:2007 年 11 月本主题演示如何为 .NET Framework 类库中的任何类型或您想要扩展的任何其他 .NET 类型实现您自己的扩展方法。客户端代码可通过以下方式使用您的扩展方法:添加对包含这些扩展方法的 DLL 的引用,并且添加一条 using 指令以指定在其中定义这些扩展方法的命名空间。定义和调用扩展方法定义一个静态类以包含扩展方法。该类必须对客户端代码可见。有关可访问性规则的更多信息,请参见访问修饰符(C# 编程指南)。将该扩展方法实现为静态方法,并使其至少具有与包含类相同的可见性。该方法的第一个参数指定方法所操作的类型;该参数必须以 this 修饰符开头。在调用代码中,添加一条 using 指令以指定包含扩展方法类的命名空间。按照与调用类型上的实例方法一样的方式调用扩展方法。请注意,第一个参数不是由调用代码指定的,因为它表示正应用运算符的类型,并且编译器已经知道对象的类型。您只需通过 n 为这两个形参提供实参。示例 下面的示例在 MyExtensions.StringExtension 类中实现了一个名为 WordCount 的扩展方法。该方法对 String 类进行操作,而该类被指定为第一个方法参数。MyExtensions 命名空间被导入到应用程序命名空间中,并且该方法是在 Main 方法内调用的。C#using System.Text;using System;namespace CustomExtensions /Extension methods must be defined in a static class public static class StringExtension / This is the extension method. / The first parameter takes the this modifier / and specifies the type for which the method is defined. public static int WordCount(this String str) return str.Split(new char , .,?, StringSplitOptions.RemoveEmptyEntries).Length; namespace Extension_Methods_Simple /Import the extension method namespace. using CustomExtensions; class Program static void Main(string args) string s = The quick brown fox jumped over the lazy dog.; / Call the method as if it were an / instance method on the type. Note that the first / parameter is not specified by the calling code. int i = s.WordCount(); System.Console.WriteLine(Word count of s is 0, i); 若要运行这段代码,请将其复制并粘贴到已经在 Visual Studio 中创建的 Visual C# 控制台应用程序项目中。默认情况下,此项目针对的是 .NET Framework 3.5 版,并且具有一个对 System.Core.dll 的引用和一条针对 System.Linq 的 using 指令。如果项目不满足上面的一个或多个要求,则您可以手动添加它们。有关更多信息,请参见如何:创建 LINQ 项目。安全性 扩展方法不会引起任何特定安全漏洞。它们永远不可用于模拟类型上的现有方法,因为在解决所有名称冲突时,都会偏向于类型本身所定义的实例或静态方法。扩展方法无法访问扩展类中的任何私有数据。扩展方法调用expr在以下形式之一的方法调用. identifier ( )expr . identifier ( args )expr . identifier ( )expr . identifier ( args )如果正常的调用处理找不到适用的方法,则将尝试以扩展方法调用的形式处理该构造。目标是查找最佳的 type-name C,以便可以进行相应的静态方法调用:C . identifier ( expr )C . identifier ( expr , args )C . identifier ( expr )C . identifier ( expr , args )如果满足以下各项,则扩展方法 Ci.Mj 符合条件 (eligible): Ci 为非泛型、非嵌套类 Mj 的名称为 identifier Mj 作为如上所示的静态方法应用于参数时是可访问且适用的 存在从 expr 到 Mj 的第一个参数的类型的隐式标识、引用或装箱转换。对 C 的搜索操作如下:o 如果给定的命名空间或编译单元直接包含具有适当扩展方法 Mj 的非泛型类型声明 Ci,则这些扩展方法的集合为候选集。o 如果使用给定命名空间或编译单元中的命名空间指令导入的命名空间直接包含具有适当扩展方法 Mj 的非泛型类型声明 Ci,则这些扩展方法的集合为候选集。 如果在任何封闭命名空间声明或编译单元中都找不到候选集,则会出现编译时错误。 否则,将对候选集应用重载决策,如(第 7.4.3 节)中所述。如果找不到一个最佳方法,则会出现编译时错误。 C 是将最佳方法声明为扩展方法的类型。 如果将 C 用作目标,则将以静态方法调用(第 7.4.4 节)的形式处理该方法调用。上述规则表示,实例方法优先于扩展方法,内部命名空间声明中可用的扩展方法优先于外部命名空间声明中可用的扩展方法,并且直接在命名空间中声明的扩展方法优先于通过 using 命名空间指令导入该命名空间的扩展方法。例如:public static class E public static void F(this object obj, int i) public static void F(this object obj, string s) class A class B public void F(int i) class C public void F(object obj) class X static void Test(A a, B b, C c) a.F(1); / E.F(object, int) a.F(hello); / E.F(object, string) b.F(1);

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论