显式和隐式的c#

我是C#的新手,学习新单词。 我发现在编程c#时很难理解这两个词的含义。 我看了字典的意思,这里是我得到的:

含蓄

“隐含的东西是以间接的方式expression的。”

“如果一个质量或要素隐含在某件事物中,它就涉及到它或者被它所performance出来;”

明确的

“明确而明确地expression或明确expression某种东西,而不是试图隐藏任何东西”

“如果你对某件事情很清楚,你可以非常坦率地说清楚。”

我想在C#中理解它。

谢谢你的帮助。

干杯


附加信息:

这里是我正在阅读的书中的一个句子的一部分,它有这个词“隐含”

“这意味着AreaPerPerson( )中的Area和AreaPerPerson( ) 隐含地引用了在调用AreaPerPerson( )的对象中find的那些variables的副本”

我完全不明白这句话在这里想说什么。

在声明转换运算符时,使用C#中的implicitexplicit关键字。 假设您有以下课程:

 public class Role { public string Name { get; set; } } 

如果你想创build一个新的Role并给它分配一个Name ,你通常会这样做:

 Role role = new Role(); role.Name = "RoleName"; 

既然它只有一个属性,如果我们可以这样做,也许会很方便:

 Role role = "RoleName"; 

这意味着我们想隐式地将一个string转换为一个Role (因为代码中没有特定的转换)。 为了达到这个目的,我们添加一个隐式转换运算符:

 public static implicit operator Role(string roleName) { return new Role() { Name = roleName }; } 

另一个select是实现一个显式的转换操作符:

 public static explicit operator Role(string roleName) { return new Role() { Name = roleName }; } 

在这种情况下,我们不能将string隐式转换为Role ,但是我们需要将其转换为我们的代码:

 Role r = (Role)"RoleName"; 

一般来说

  • 隐含的:自动完成一些事情。
  • 显式的:你已经在源代码中写了一些东西来表明你想要发生什么。

例如:

 int x = 10; long y = x; // Implicit conversion from int to long int z = (int) y; // Explicit conversion from long to int 

内隐和外显在不同的语境中被使用得相当多,但是一般意义将总是沿着这些线。

请注意,偶尔两个可以走到一起。 例如:

 int x = 10; long y = (long) x; // Explicit use of implicit conversion! 

(显式转换必须明确说明;隐式转换是隐式使用的,也就是说,代码不需要声明它)。

考虑你有两个类:

 internal class Explicit { public static explicit operator int (Explicit a) { return 5; } } internal class Implicit { public static implicit operator int(Implicit a) { return 5; } } 

和两个对象:

 var obj1 = new Explicit(); var obj2 = new Implicit(); 

你现在可以写:

 int integer = obj2; // implicit conversion - you don't have to use (int) 

要么:

 int integer = (int)obj1; // explicit conversion 

但:

 int integer = obj1; // WON'T WORK - explicit cast required 

隐式转换意味着在转换不会失去任何精度时使用。 明确的转换意味着,你可以放松一些精确性,并且必须清楚地说明你知道自己在做什么。

另外还有第二个应用隐式/显式术语的上下文 – 接口实现。 在这种情况下没有关键字。

 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 

所以当你使用显式的接口实现的时候,当你使用具体types的时候,接口的方法是不可见的。 当接口是辅助接口时,可以使用它,而不是类的主要责任的一部分,并且您不希望使用其他方法误导使用您的代码的用户。

我认为这个链接很清楚隐式转换是什么 – 这是一个你不需要在赋值中明确地转换值的地方。 所以,而不是做

 myDigit = (Digit) myDouble 

…你可以做:

 myDigit = myDouble; 

在C#中明确主要是清楚明确地显示你的意图。

例如:

 class MyClass { string myField; void MyMethod(int someNumber) { } } 

在上面的代码中,类,字段和方法的可见性都是隐含的。 他们使用编译器的默认值。

现在,我永远不会记得编译器的默认值是什么,也可能是你的同事不能,所以不要依赖每个人记住默认值,你可以是明确的。

 public class MyClass { private string myField; public void MyMethod(int someNumber) { } } 

隐含可以被认为是隐含的,但明确的意思是说你必须自己完成它。 像演员一样。 这是一个隐含的演员:

 int implicit; implicit = 7.5; 

值“7.5”将隐式地被转换为int。 这意味着编译器为你做。

这里是明确的:

 int explicit; explicit = (int)7.5; 

在这里,你告诉编译器你想要投射。 您显式声明转换。 希望有所帮助。 资料来源: http : //cboard.cprogramming.com/cplusplus-programming/24371-implicit-explicit.html

这是学习C#的一个很好的资源: http : //www.functionx.com/csharp/

请特别看看这里: http : //www.functionx.com/csharp/math/Lesson20.htm