tin*_*tes 59 c# dictionary explicit implicit
我是C#的新手并且学习新单词.在编程c#时,我发现很难理解这两个词的含义是什么.我在字典中查找了含义,这是我得到的:
含蓄
"隐含的东西是间接表达的."
"如果一个品质或元素隐含在某个东西中,它就会参与其中或由它展示;"
明确的
"明确表达或展示的东西清楚公开,没有任何隐藏任何东西的企图"
"如果你明确表达某些事情,那么你就会公开而清楚地谈论它."
我想在C#中理解它.
谢谢你的帮助.
干杯
附加信息:
这是我正在阅读的书中的一部分句子,其中有"隐含"这个词
"这意味着里面的区域和占用者
AreaPerPerson( )隐含地引用在调用的对象中找到的那些变量的副本AreaPerPerson( )"
我完全不明白这句话试图说什么.
Fre*_*örk 115
声明转换运算符时使用C#中的implicit和explicit关键字.假设您有以下课程:
public class Role
{
public string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
如果你想创建一个新的Role并为其分配一个Name,你通常会这样做:
Role role = new Role();
role.Name = "RoleName";
Run Code Online (Sandbox Code Playgroud)
由于它只有一个属性,如果我们可以这样做,它可能会很方便:
Role role = "RoleName";
Run Code Online (Sandbox Code Playgroud)
这意味着我们希望隐式地将字符串转换为a Role(因为代码中没有特定的转换).为此,我们添加了一个隐式转换运算符:
public static implicit operator Role(string roleName)
{
return new Role() { Name = roleName };
}
Run Code Online (Sandbox Code Playgroud)
另一种选择是实现显式转换运算符:
public static explicit operator Role(string roleName)
{
return new Role() { Name = roleName };
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我们不能将字符串隐式转换为a Role,但我们需要在代码中强制转换它:
Role r = (Role)"RoleName";
Run Code Online (Sandbox Code Playgroud)
Jon*_*eet 56
一般来说
例如:
int x = 10;
long y = x; // Implicit conversion from int to long
int z = (int) y; // Explicit conversion from long to int
Run Code Online (Sandbox Code Playgroud)
隐式和显式在不同的语境中使用相当多,但一般意义总是沿着这些方向.
请注意,偶尔两者可以结合在一起.例如:
int x = 10;
long y = (long) x; // Explicit use of implicit conversion!
Run Code Online (Sandbox Code Playgroud)
(显式转换是必须明确说明的转换;隐式版本是可以隐式使用的版本,即代码不必声明它.)
考虑你有两个类:
internal class Explicit
{
public static explicit operator int (Explicit a)
{
return 5;
}
}
internal class Implicit
{
public static implicit operator int(Implicit a)
{
return 5;
}
}
Run Code Online (Sandbox Code Playgroud)
和两个对象:
var obj1 = new Explicit();
var obj2 = new Implicit();
Run Code Online (Sandbox Code Playgroud)
你现在可以写:
int integer = obj2; // implicit conversion - you don't have to use (int)
Run Code Online (Sandbox Code Playgroud)
要么:
int integer = (int)obj1; // explicit conversion
Run Code Online (Sandbox Code Playgroud)
但:
int integer = obj1; // WON'T WORK - explicit cast required
Run Code Online (Sandbox Code Playgroud)
当转换没有失去任何精度时,意味着使用隐式转换.显式转换意味着你可以放松一些精确度,并且必须清楚地说明你知道自己在做什么.
还有第二个上下文,其中应用了隐式/显式术语 - 接口实现.在这种情况下没有关键字.
internal interface ITest
{
void Foo();
}
class Implicit : ITest
{
public void Foo()
{
throw new NotImplementedException();
}
}
class Explicit : ITest
{
void ITest.Foo() // note there's no public keyword!
{
throw new NotImplementedException();
}
}
Implicit imp = new Implicit();
imp.Foo();
Explicit exp = new Explicit();
// exp.Foo(); // won't work - Foo is not visible
ITest interf = exp;
interf.Foo(); // will work
Run Code Online (Sandbox Code Playgroud)
因此,当您使用显式接口实现时,在使用具体类型时,接口的方法不可见.这可以在接口是帮助程序接口时使用,而不是类主要负责的一部分,并且您不希望其他方法使用您的代码误导某人.