跳转到内容
主菜单
主菜单
移至侧栏
隐藏
导航
首页
最近更改
随机页面
MediaWiki帮助
代码酷
搜索
搜索
中文(中国大陆)
外观
创建账号
登录
个人工具
创建账号
登录
未登录编辑者的页面
了解详情
贡献
讨论
编辑“︁
C Sharp 方法调用
”︁
页面
讨论
大陆简体
阅读
编辑
编辑源代码
查看历史
工具
工具
移至侧栏
隐藏
操作
阅读
编辑
编辑源代码
查看历史
常规
链入页面
相关更改
特殊页面
页面信息
外观
移至侧栏
隐藏
您的更改会在有权核准的用户核准后向读者展示。
警告:
您没有登录。如果您进行任何编辑,您的IP地址会公开展示。如果您
登录
或
创建账号
,您的编辑会以您的用户名署名,此外还有其他益处。
反垃圾检查。
不要
加入这个!
{{DISPLAYTITLE:C#方法调用}} '''C#方法调用'''是面向对象编程中的核心概念,指通过指定方法名称和参数来执行特定功能的代码块。本文将详细讲解方法调用的语法、分类、执行流程及实际应用。 == 概述 == 在C#中,'''方法调用'''是指程序通过方法名触发已定义方法的执行过程。方法可以: * 接收输入参数 * 执行特定操作 * 返回结果(非必需) 方法调用涉及三个关键要素: # '''调用者''':发起方法调用的对象或类 # '''方法签名''':包括方法名和参数列表 # '''返回值处理'''(如存在) == 基本语法 == C#方法调用的基本形式如下: <syntaxhighlight lang="csharp"> // 无返回值方法 MethodName(argument1, argument2); // 有返回值方法 returnType result = MethodName(argument1, argument2); </syntaxhighlight> === 示例:简单方法调用 === <syntaxhighlight lang="csharp"> class Calculator { // 方法定义 public int Add(int a, int b) { return a + b; } } class Program { static void Main() { Calculator calc = new Calculator(); // 方法调用 int sum = calc.Add(5, 3); Console.WriteLine(sum); // 输出:8 } } </syntaxhighlight> == 方法调用类型 == C#支持多种方法调用方式: === 1. 实例方法调用 === 需要通过对象实例调用的方法: <syntaxhighlight lang="csharp"> class MyClass { public void InstanceMethod() { Console.WriteLine("实例方法被调用"); } } // 调用 MyClass obj = new MyClass(); obj.InstanceMethod(); </syntaxhighlight> === 2. 静态方法调用 === 通过类名直接调用的方法: <syntaxhighlight lang="csharp"> class MathUtility { public static double Square(double x) { return x * x; } } // 调用 double result = MathUtility.Square(4.5); </syntaxhighlight> === 3. 扩展方法调用 === 为现有类型添加新方法: <syntaxhighlight lang="csharp"> public static class StringExtensions { public static bool IsNumeric(this string str) { return double.TryParse(str, out _); } } // 调用 string input = "123"; bool isNumber = input.IsNumeric(); </syntaxhighlight> == 参数传递方式 == {| class="wikitable" |+ 参数传递方式对比 ! 方式 !! 描述 !! 示例 |- | '''值传递''' || 传递参数副本 || <code>Method(int x)</code> |- | '''引用传递''' || 传递参数引用(ref/out) || <code>Method(ref int x)</code> |- | '''参数数组''' || 可变数量参数(params) || <code>Method(params int[] arr)</code> |} === ref 和 out 示例 === <syntaxhighlight lang="csharp"> void ModifyValues(ref int x, out int y) { x *= 2; y = x + 10; } int a = 5, b; ModifyValues(ref a, out b); Console.WriteLine($"a={a}, b={b}"); // 输出:a=10, b=20 </syntaxhighlight> == 方法调用过程分析 == 方法调用时的内存执行流程: <mermaid> sequenceDiagram participant Caller as 调用者 participant Stack as 调用栈 participant Method as 被调方法 Caller->>Stack: 1. 压入返回地址 Caller->>Stack: 2. 压入参数 Caller->>Method: 3. 跳转到方法 Method->>Stack: 4. 分配局部变量 Method-->>Caller: 5. 返回结果(可选) Stack->>Caller: 6. 恢复调用现场 </mermaid> == 高级主题 == === 方法重载解析 === 当存在多个同名方法时,编译器根据以下规则选择最匹配的方法: # 参数个数 # 参数类型 # 参数顺序 === 动态方法调用 === 使用反射进行运行时方法调用: <syntaxhighlight lang="csharp"> Type type = typeof(MyClass); object instance = Activator.CreateInstance(type); MethodInfo method = type.GetMethod("MethodName"); method.Invoke(instance, new object[] { arg1, arg2 }); </syntaxhighlight> == 实际应用案例 == === 案例1:数据验证 === <syntaxhighlight lang="csharp"> public static class Validator { public static bool ValidateEmail(string email) { return Regex.IsMatch(email, @"^[^@\s]+@[^@\s]+\.[^@\s]+$"); } } // 使用 if (Validator.ValidateEmail("user@example.com")) { Console.WriteLine("邮箱有效"); } </syntaxhighlight> === 案例2:游戏开发 === <syntaxhighlight lang="csharp"> class Player { private int health = 100; public void TakeDamage(int amount) { health -= amount; if (health <= 0) Die(); } private void Die() { Console.WriteLine("玩家死亡"); } } // 使用 Player player = new Player(); player.TakeDamage(30); // 调用实例方法 </syntaxhighlight> == 常见问题 == {{Q&A |问题1 = 方法调用和函数调用有什么区别? |答案1 = 在C#中这两个术语通常可以互换,但严格来说: * '''方法'''是类或结构的成员 * '''函数'''是独立的概念(如C语言中的函数) |问题2 = 为什么有时方法调用会报"NullReferenceException"? |答案2 = 当尝试通过null对象引用调用实例方法时会发生此异常,例如: <syntaxhighlight lang="csharp"> MyClass obj = null; obj.Method(); // 抛出NullReferenceException </syntaxhighlight> }} == 性能考虑 == * 静态方法调用比实例方法稍快(不需要this指针) * 频繁的小方法调用可能受方法调用开销影响 * 虚方法调用(virtual)比非虚方法调用慢 == 总结 == C#方法调用是程序执行的基本单元,理解其工作原理对于: * 编写可维护代码 * 调试复杂逻辑 * 优化程序性能 关键要点: * 区分实例/静态/扩展方法调用 * 理解参数传递方式 * 掌握方法重载解析规则 * 认识常见错误场景 {{C#学习路径结构导航}} [[Category:编程语言]] [[Category:C Sharp]] [[Category:C Sharp 函数]]
摘要:
请注意,所有对代码酷的贡献均被视为依照知识共享署名-非商业性使用-相同方式共享发表(详情请见
代码酷:著作权
)。如果您不希望您的文字作品被随意编辑和分发传播,请不要在此提交。
您同时也向我们承诺,您提交的内容为您自己所创作,或是复制自公共领域或类似自由来源。
未经许可,请勿提交受著作权保护的作品!
取消
编辑帮助
(在新窗口中打开)
该页面使用的模板:
模板:C
(
编辑
)
模板:Q&A
(
编辑
)