跳转到内容
主菜单
主菜单
移至侧栏
隐藏
导航
首页
最近更改
随机页面
MediaWiki帮助
代码酷
搜索
搜索
中文(中国大陆)
外观
创建账号
登录
个人工具
创建账号
登录
未登录编辑者的页面
了解详情
贡献
讨论
编辑“︁
C Sharp 方法文档
”︁
页面
讨论
大陆简体
阅读
编辑
编辑源代码
查看历史
工具
工具
移至侧栏
隐藏
操作
阅读
编辑
编辑源代码
查看历史
常规
链入页面
相关更改
特殊页面
页面信息
外观
移至侧栏
隐藏
您的更改会在有权核准的用户核准后向读者展示。
警告:
您没有登录。如果您进行任何编辑,您的IP地址会公开展示。如果您
登录
或
创建账号
,您的编辑会以您的用户名署名,此外还有其他益处。
反垃圾检查。
不要
加入这个!
= C#方法文档 = '''C#方法'''是C#编程语言中的基本构建块之一,用于封装可重用的代码逻辑。方法允许开发者将功能分解为独立的单元,从而提高代码的可读性、可维护性和复用性。本文档将详细介绍C#方法的语法、类型、参数传递、重载及实际应用。 == 方法的基本概念 == 在C#中,'''方法'''(Method)是一段具有名称的代码块,用于执行特定任务。方法可以接受输入参数,并可能返回一个值。方法的主要组成部分包括: * '''访问修饰符'''(如public、private等) * '''返回类型'''(如void、int等) * '''方法名称''' * '''参数列表'''(可选) * '''方法体'''(包含实际执行的代码) === 基本语法 === <syntaxhighlight lang="csharp"> 访问修饰符 返回类型 方法名称(参数列表) { // 方法体 } </syntaxhighlight> == 方法的类型 == C#支持多种类型的方法,每种类型适用于不同的场景。 === 1. 实例方法 === 实例方法属于类的实例,必须通过对象调用。 <syntaxhighlight lang="csharp"> public class Calculator { public int Add(int a, int b) // 实例方法 { return a + b; } } // 调用 Calculator calc = new Calculator(); int result = calc.Add(5, 3); // 输出: 8 </syntaxhighlight> === 2. 静态方法 === 静态方法属于类本身而非实例,使用`static`关键字声明。 <syntaxhighlight lang="csharp"> public class MathUtility { public static double Square(double number) // 静态方法 { return number * number; } } // 调用 double squared = MathUtility.Square(4.5); // 输出: 20.25 </syntaxhighlight> === 3. 虚方法与重写方法 === 虚方法(`virtual`)允许子类重写(`override`)其实现。 <syntaxhighlight lang="csharp"> public class Animal { public virtual void MakeSound() // 虚方法 { Console.WriteLine("Some sound"); } } public class Dog : Animal { public override void MakeSound() // 重写方法 { Console.WriteLine("Bark"); } } // 调用 Animal myDog = new Dog(); myDog.MakeSound(); // 输出: Bark </syntaxhighlight> == 方法参数 == C#方法支持多种参数传递方式: === 1. 值参数(默认) === 参数值被复制到方法中。 <syntaxhighlight lang="csharp"> public void Increment(int num) { num++; Console.WriteLine(num); // 输出: 6 } int value = 5; Increment(value); Console.WriteLine(value); // 输出: 5 (原始值未改变) </syntaxhighlight> === 2. 引用参数(ref) === 使用`ref`关键字传递变量引用。 <syntaxhighlight lang="csharp"> public void Increment(ref int num) { num++; } int value = 5; Increment(ref value); Console.WriteLine(value); // 输出: 6 (原始值已改变) </syntaxhighlight> === 3. 输出参数(out) === 使用`out`关键字返回多个值。 <syntaxhighlight lang="csharp"> public void Divide(int dividend, int divisor, out int quotient, out int remainder) { quotient = dividend / divisor; remainder = dividend % divisor; } int q, r; Divide(10, 3, out q, out r); Console.WriteLine($"商: {q}, 余数: {r}"); // 输出: 商: 3, 余数: 1 </syntaxhighlight> === 4. 参数数组(params) === 使用`params`关键字接受可变数量的参数。 <syntaxhighlight lang="csharp"> public int Sum(params int[] numbers) { int total = 0; foreach (int num in numbers) { total += num; } return total; } int result = Sum(1, 2, 3, 4, 5); // 输出: 15 </syntaxhighlight> == 方法重载 == 方法重载允许在同一类中定义多个同名方法,只要它们的参数列表不同。 <syntaxhighlight lang="csharp"> public class Printer { public void Print(string text) // 版本1 { Console.WriteLine(text); } public void Print(int number) // 版本2 { Console.WriteLine(number.ToString()); } public void Print(string text, int times) // 版本3 { for (int i = 0; i < times; i++) { Console.WriteLine(text); } } } // 调用 Printer printer = new Printer(); printer.Print("Hello"); // 调用版本1 printer.Print(42); // 调用版本2 printer.Print("C#", 3); // 调用版本3 </syntaxhighlight> == 实际应用案例 == === 案例1:电子商务系统中的折扣计算 === <syntaxhighlight lang="csharp"> public class DiscountCalculator { // 计算固定折扣 public decimal CalculateDiscount(decimal price, decimal discountRate) { return price * (1 - discountRate); } // 计算阶梯折扣 public decimal CalculateDiscount(decimal price, int quantity, decimal[] discountRates) { if (quantity <= 0) return price; int tier = Math.Min(quantity, discountRates.Length) - 1; return price * (1 - discountRates[tier]); } } // 使用示例 var calculator = new DiscountCalculator(); decimal finalPrice1 = calculator.CalculateDiscount(100.0m, 0.2m); // 8折 decimal finalPrice2 = calculator.CalculateDiscount(100.0m, 3, new[] { 0.1m, 0.15m, 0.2m }); // 第3档折扣 </syntaxhighlight> === 案例2:游戏角色状态更新 === <syntaxhighlight lang="csharp"> public class GameCharacter { private int health; // 恢复生命值 public void Heal(int amount) { health = Math.Min(100, health + amount); Console.WriteLine($"恢复 {amount} 点生命,当前生命值: {health}"); } // 受到伤害 public void TakeDamage(int damage, bool isCritical = false) { int actualDamage = isCritical ? damage * 2 : damage; health = Math.Max(0, health - actualDamage); Console.WriteLine($"受到 {(isCritical ? "暴击 " : "")}伤害: {actualDamage}, 剩余生命值: {health}"); } } // 使用示例 var hero = new GameCharacter { Health = 80 }; hero.TakeDamage(30); // 普通伤害 hero.TakeDamage(20, true); // 暴击伤害 hero.Heal(25); // 恢复生命 </syntaxhighlight> == 方法调用流程 == <mermaid> graph TD A[调用方法] --> B[参数评估] B --> C[创建新的栈帧] C --> D[参数传递] D --> E[执行方法体] E --> F[返回值处理] F --> G[销毁栈帧] G --> H[控制权返回调用者] </mermaid> == 最佳实践 == 1. '''单一职责原则''': 每个方法应只完成一个明确的任务 2. '''合理命名''': 方法名应清晰表达其功能(动词+名词,如`CalculateTax`) 3. '''参数数量控制''': 避免过多参数(通常不超过4-5个) 4. '''适当长度''': 方法体不宜过长(建议不超过一屏) 5. '''异常处理''': 在方法中妥善处理可能出现的异常 == 性能考虑 == * 频繁调用的简单方法可考虑标记为`inline`(通过JIT编译器优化) * 避免在循环中创建大量临时对象的方法 * 对于性能关键代码,可考虑使用`ref`参数减少复制开销 == 数学方法示例 == 以下示例展示如何在C#方法中实现数学公式: 计算二次方程的根: <math>ax^2 + bx + c = 0</math> <syntaxhighlight lang="csharp"> public static (double? root1, double? root2) SolveQuadratic(double a, double b, double c) { double discriminant = b * b - 4 * a * c; if (discriminant < 0) return (null, null); // 无实数根 double sqrtDiscriminant = Math.Sqrt(discriminant); double root1 = (-b + sqrtDiscriminant) / (2 * a); double root2 = (-b - sqrtDiscriminant) / (2 * a); return (root1, root2); } // 使用示例 var roots = SolveQuadratic(1, -3, 2); // x² -3x +2 =0 Console.WriteLine($"根1: {roots.root1}, 根2: {roots.root2}"); // 输出: 根1: 2, 根2: 1 </syntaxhighlight> == 总结 == C#方法是构建程序逻辑的核心元素。通过合理使用方法的各种特性(如重载、参数传递方式、静态/实例方法等),可以创建出结构良好、易于维护的代码。掌握方法的设计和使用技巧是成为高效C#开发者的关键一步。 [[Category:编程语言]] [[Category:C Sharp]] [[Category:C Sharp 函数]]
摘要:
请注意,所有对代码酷的贡献均被视为依照知识共享署名-非商业性使用-相同方式共享发表(详情请见
代码酷:著作权
)。如果您不希望您的文字作品被随意编辑和分发传播,请不要在此提交。
您同时也向我们承诺,您提交的内容为您自己所创作,或是复制自公共领域或类似自由来源。
未经许可,请勿提交受著作权保护的作品!
取消
编辑帮助
(在新窗口中打开)