闽公网安备 35020302035485号
using System;
publicclassBank
{
public void ApplyInterest(ref decimal balance, decimal interestRate)
{
balance += balance * interestRate / 100;
Console.WriteLine($"Balance after applying interest: {balance}");
}
}
publicclassProgram
{
public static void Main()
{
decimal accountBalance = 1000m;
Bank bank = new Bank();
// 堆代码 duidaima.com
Console.WriteLine($"Initial Balance: {accountBalance}");
bank.ApplyInterest(ref accountBalance, 5);
Console.WriteLine($"Final Balance: {accountBalance}");
}
}
优点:.必须提前初始化,不够灵活。
using System;
publicclassAuthService
{
public bool Login(string username, string password, out string role)
{
if (username == "admin" && password == "1234")
{
role = "Administrator";
returntrue;
}
elseif (username == "john" && password == "pass")
{
role = "User";
returntrue;
}
else
{
role = "Guest";
returnfalse;
}
}
}
publicclassProgram
{
public static void Main()
{
AuthService auth = new AuthService();
if (auth.Login("admin", "1234", outstring userRole))
{
Console.WriteLine($"Login successful! Role: {userRole}");
}
else
{
Console.WriteLine("Login failed.");
}
}
}
优点:方法必须保证给 out 参数赋值,逻辑复杂时容易漏掉,维护成本高。
using System;
publicstruct Coordinates
{
publicdouble X { get; }
publicdouble Y { get; }
public Coordinates(double x, double y)
{
X = x;
Y = y;
}
}
publicclassGeoService
{
public double CalculateDistance(in Coordinates point1, in Coordinates point2)
{
double dx = point2.X - point1.X;
double dy = point2.Y - point1.Y;
return Math.Sqrt(dx * dx + dy * dy);
}
}
publicclassProgram
{
public static void Main()
{
Coordinates location1 = new Coordinates(0, 0);
Coordinates location2 = new Coordinates(3, 4);
GeoService geo = new GeoService();
double distance = geo.CalculateDistance(in location1, in location2);
Console.WriteLine($"Distance: {distance}");
}
}
优点:.对 int、decimal 这种小类型没啥意义,反而显得啰嗦。
| 关键字 | 是否需要提前初始化 | 在方法内是否可修改 | 方法是否必须赋值 | 常用场景 | 优点 | 缺点 |
|---|---|---|---|---|---|---|
| ref | ✅ 必须 | ✅ 可修改 | ❌ 不要求 | 方法需要读取并更新变量 | 无需返回值即可修改变量 | 可能导致意外修改 |
| out | ❌ 不需要 | ✅ 可修改 | ✅ 必须赋值 | 返回多个结果 | 支持多返回值 | 增加方法复杂度 |
| in | ✅ 必须 | ❌ 只读 | ❌ 不要求 | 大型结构体传参 | 避免复制,性能更好 | 对小数据类型作用不大 |