gpt4 book ai didi

c# - 为什么这个方法接受字节,当它的参数是 double ?

转载 作者:太空宇宙 更新时间:2023-11-03 18:56:41 24 4
gpt4 key购买 nike

首先,我想说这只是一个简单的代码,它是一个例子,我正在准备考试。

public class TOblik
{
public int povrsina = 0;
public TVrsta vrsta = 0;

public TOblik(TVrsta a)
{
}
}

public enum TVrsta
{
Kvadrat,
Krug
}

public class A
{

public static double Dodaj(TOblik o, TVrsta v, double r = 0)
{
if (v == TVrsta.Kvadrat)
{
return o.povrsina + r * r;
}
else
{
o.vrsta = v;
return o.povrsina;
}
}

static void Main(string[] args)
{
TOblik oblik = new TOblik(TVrsta.Kvadrat);
double vrednost = 10;
byte broj = 5;
TVrsta vrsta = TVrsta.Krug;

Dodaj(oblik, vrsta, broj);

Console.WriteLine();
Console.ReadLine();
}
}

我不明白为什么这段代码有效。方法Dodaj最后一个参数是double,但是我转发broj的时候是accepting的(类型是byte)。

最佳答案

C# 具有隐式转换:某些 类型的数据可以转换其他 类型的数据,而无需提及转换(显式 转换也存在,例如 byte a = (byte) b; )。通常只有当“目标 类型”更通用时才能进行隐式转换,因此可以处理 类型的所有值。

正如您在 documentation 中所读到的那样:

The following table shows the predefined implicit numeric conversions. Implicit conversions might occur in many situations, including method invoking and assignment statements.

(...)

From    To
------------------------------------------------------------------------
... ...
byte short, ushort, int, uint, long, ulong, float, double, or decimal
... ...

该文档还警告说,从 int 到例如 float 的转换可能会导致精度损失。因此,人们在处理这些问题时总是要多加小心。

您可以看到这种转换发生在 csharp 交互式 shell 中:

csharp> byte a = 10;
csharp> double b = a;
csharp> b
10

关于c# - 为什么这个方法接受字节,当它的参数是 double ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43427541/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com