IT Share you

명시 적 및 암시 적 C #

shareyou 2020. 12. 13. 11:27
반응형

명시 적 및 암시 적 C #


저는 C #이 처음이고 새로운 단어를 배우고 있습니다. C #을 프로그래밍 할 때이 두 단어의 의미를 이해하기가 어렵습니다. 사전에서 의미를 찾았고 여기에 내가 얻은 것이 있습니다.

절대적인

"암묵적인 것은 간접적으로 표현됩니다."

"특성 또는 요소가 어떤 것에 내재되어 있다면 그에 관련되거나 그에 의해 표시됩니다."

명백한

"노골적인 내용은 어떤 것도 숨기려는 시도없이 명확하고 공개적으로 표현되거나 표시됩니다."

"당신이 어떤 것에 대해 명시 적이라면 그것에 대해 매우 공개적이고 분명하게 말합니다."

C #으로 이해하고 싶습니다.

당신의 도움을 주셔서 감사합니다.

건배


추가 정보:

여기 제가 지금 읽고있는 책에서 "암시 적"이라는 단어가있는 문장의 일부가 있습니다.

"이것은 내부의 Area 및 Occupants가를 호출하는 객체에서 발견 된 해당 변수의 복사본을 AreaPerPerson( ) 암시 적으로 참조 함을 의미합니다. AreaPerPerson( )"

이 문장이 무슨 말을 하려는지 잘 모르겠습니다.


C # implicitexplicit키워드는 변환 연산자를 선언 할 때 사용됩니다. 다음과 같은 클래스가 있다고 가정 해 보겠습니다.

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

새로 Role만들고 할당하려면 Name일반적으로 다음과 같이합니다.

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

속성이 하나뿐이므로 대신 다음과 같이 할 수 있다면 편리 할 것입니다.

Role role = "RoleName";

이것은 우리가 암시 적 으로 문자열을 a로 변환하기를 원한다는 것을 의미합니다 Role(코드에 관련된 특정 캐스트가 없기 때문에). 이를 위해 암시 적 변환 연산자를 추가합니다.

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

또 다른 옵션은 명시 적 변환 연산자를 구현하는 것입니다.

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

이 경우 문자열을으로 암시 적으로 변환 할 수는 없지만 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

Implicit conversion is meant to be used when conversion doesn't loose any precision. Explicit conversion means, that you can loose some precision and must state clearly that you know what you're doing.

There is also a second context in which implicit/explicit terms are applied - interface implementation. There are no keywords in that case.

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

So when you use explicit interface implementation, interface's methods are not visible when you use concrete type. This can be used when interface is a helper interface, not part of class'es primary responsibility and you don't want additional methods to mislead someone using your code.


I think this link makes it pretty clear what an implicit conversion is - it's one where you don't need to explicitly cast the value in an assignment. So, instead of doing

myDigit = (Digit) myDouble 

...you can just do:

myDigit = myDouble;

Being explicit in C# is mainly about showing your intentions clearly and unambiguously.

For example:

class MyClass
{
    string myField;

    void MyMethod(int someNumber)
    {

    }
}

In the above code the visibility of the class, field and method are all implied. They use the compiler defaults.

Now, I can never remember what the compiler defaults are, and maybe your colleagues can't either, so rather than rely on everyone remembering what the defaults are, you can be explicit.

public class MyClass
{
    private string myField;

    public void MyMethod(int someNumber)
    {
    }
}

Implicit can be taken as implied, but explicit means that you state it must be done yourself. Like with casts. Here is an implicit cast:

int implicit;
implicit = 7.5;

The value '7.5' will implicitly be cast as an int. This means the compiler does it for you.

Here is explicit:

int explicit;
explicit = (int)7.5;

Here you tell the compiler that you want it cast. You explicitly declare the conversion. Hope that helps. Source: http://cboard.cprogramming.com/cplusplus-programming/24371-implicit-explicit.html


This is a great resource for learning C#: http://www.functionx.com/csharp/

Take a look here specifically: http://www.functionx.com/csharp/math/Lesson20.htm

참고URL : https://stackoverflow.com/questions/1176641/explicit-and-implicit-c-sharp

반응형