인터페이스를 구현하는 클래스 이름 가져 오기

Gillardo

다른 개체에서 상속 할 수도 있고 상속하지 않을 수도 있지만 인터페이스를 구현할 것이므로 IMyInterface라고 부를 수 있습니다.

public interface IMyInterface {
    long MyPropertyName { get; set; }
}

객체는 항상이 인터페이스를 구현하지만 객체가 상속하는 클래스에서 구현되었을 수 있습니다. 이 인터페이스가 구현 된 클래스의 이름을 어떻게 얻을 수 있습니까?

예제는 이러한 결과를 제공해야합니다.

public class MyClass : IMyInterface {

}

public class MyHighClass : MyClass {

}

public class MyPlainClass {

}

public class PlainInheritedClass : MyPlainClass, IMyInterface {

}

MyClass를 전달하면 MyClass가 인터페이스를 구현하므로 MyClass를 반환해야합니다.

MyHighClass를 전달하면 MyClass가 상속되어 인터페이스를 구현하기 때문에 MyClass를 반환해야합니다.

PlainInheritedClass를 전달하면 MyPlainClass에서 상속 되었기 때문에 PlainInheriedClass를 반환해야하지만 인터페이스를 구현하지 않았으므로 PlainInheritedClass가 수행했습니다.

편집 / 설명

엔티티 프레임 워크 6으로 작업하고 있습니다. 사용자가 데이터베이스에서 데이터를 삭제할 수 있도록하는 일종의 휴지통 기능을 만들었지 만 실제로는 숨길뿐입니다. 이 기능을 사용하려면 엔터티가 특정 속성을 가진 인터페이스를 구현해야합니다.

내 엔티티의 대부분은 아무것도 상속하지 않고 인터페이스를 구현합니다. 하지만 다른 개체에서 상속하는 몇 가지 엔터티가 있습니다. 때로는 상속받은 객체가 인터페이스를 구현하고 때로는 객체 자체가 인터페이스를 구현합니다.

값을 설정할 때 엔티티 및 엔티티 프레임 워크를 사용하여 업데이트 할 테이블을 결정합니다. 하지만 속성을 "설정 해제"하면 내 SQL 문을 사용하고 있습니다. 나만의 SQL 문을 만들려면 업데이트해야하는 열이있는 테이블을 찾아야합니다.

.Where제네릭 DbSet 클래스에 존재하지 않기 때문에 엔터티 프레임 워크를 사용하여 형식 만 기반으로 엔터티를로드 할 수 없습니다 .

그래서 나는 이와 비슷한 SQL 문을 만들고 싶습니다.

UPDATE tableX SET interfaceProperty = NULL WHERE interfaceProperty = X
Gillardo

나는 모든 것을 생각하고 있었는데, 기능은 매우 쉬웠다. 누군가가 은밀한 무언가를 필요로한다면 여기에 있습니다. 대신 항상 확장으로 만들 수 있습니다.

코드는 기본 클래스까지 계속해서 삽입 된 다음 트리를 통해 백업되는 동안 각 클래스를 확인합니다.

public Type GetImplementingClass(Type type, Type interfaceType)
{
    Type baseType = null;

    // if type has a BaseType, then check base first
    if (type.BaseType != null)
        baseType = GetImplementingClass(type.BaseType, interfaceType);

    // if type
    if (baseType == null)
    {
        if (interfaceType.IsAssignableFrom(type))
            return type;
    }

    return baseType;
}

그래서 저는 이것을 예를 들어 이렇게 불러야했습니다.

// result = MyClass
var result = GetClassInterface(typeof(MyClass), typeof(IMyInterface));

// result = MyClass
var result = GetClassInterface(typeof(MyHighClass), typeof(IMyInterface));

// result = PlainInheritedClass 
var result = GetClassInterface(typeof(PlainInheritedClass), typeof(IMyInterface));

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

Symfony 2/3 인터페이스를 구현하는 디렉토리에서 클래스 가져 오기

분류에서Dev

클래스 이름을 구현하여 내 보낸 인터페이스 가져 오기

분류에서Dev

인터페이스 메서드를 통해 인터페이스를 구현하는 클래스의 어셈블리 버전 가져 오기

분류에서Dev

일반 인터페이스를 구현하는 클래스에서 "클래스가 인터페이스 멤버를 구현하지 않습니다."오류

분류에서Dev

인터페이스에서 해당 인터페이스를 구현하는 클래스로 열거 형을 가져 오려면 어떻게해야합니까?

분류에서Dev

인터페이스를 먼저 구현하지만 파생 클래스는없는 모든 C # 유형 가져 오기

분류에서Dev

버튼 클래스 이름 또는 이름 만 가져 오기

분류에서Dev

ReactiveUI, 탐색시 viewmodel에서 목록 가져 오기-viewmodel이 인터페이스를 구현하는 경우

분류에서Dev

방법은 몇 가지 기본 클래스를 확장하지 않는 특정 인터페이스를 구현하는 모든 클래스를 식별?

분류에서Dev

구현 된 인터페이스를 변경하지 않고 구현 클래스에 기능 추가

분류에서Dev

클래스가 C #에서 상속하고 구현하는 모든 유형 및 인터페이스 가져 오기

분류에서Dev

현재 클래스 이름 가져 오기

분류에서Dev

Jsoup 클래스 이름 가져 오기

분류에서Dev

JavaScript는 클래스 이름으로 요소 가져 오기

분류에서Dev

Jquery 클래스 이름을 사용하여 값 가져 오기

분류에서Dev

져지의 동적 기능 인터페이스를 구현하는 클래스 용 Junits를 작성하는 방법은 무엇입니까?

분류에서Dev

가져 오기-클래스 이름이있는 div 추가 및 찾기

분류에서Dev

기존 인터페이스를 구현하는 동적으로로드 된 클래스 인스턴스화

분류에서Dev

기본 클래스에서 정적 인터페이스를 정의하고 인터페이스가 파생 클래스에서 구현되어야하는지 확인하는 방법은 무엇입니까?

분류에서Dev

"시작"선택기를 사용하여 클래스 이름 값 가져 오기

분류에서Dev

TestNG의 ITestResult 인터페이스 또는 클래스입니까? 인터페이스 어떤 클래스가이 인터페이스를 구현 했습니까?

분류에서Dev

클래스 수준에서 클래스 이름 가져 오기

분류에서Dev

슈퍼 클래스 또는 인터페이스 목록에서 하위 클래스 인스턴스 가져 오기

분류에서Dev

클래스가 명시 적으로 특정 인터페이스를 구현하는 선언하고 있는지 알아보십시오

분류에서Dev

특정 클래스를 확장하는 모든 클래스 이름 가져 오기

분류에서Dev

클래스가 인터페이스를 구현하는지 확인하는 방법

분류에서Dev

클래스가 C #에서 특정 인터페이스를 구현하는지 확인하는 방법

분류에서Dev

클래스가 하나의 속성으로 인터페이스를 구현하는 방법은 다른 인터페이스도 구현할 수 있습니까?

분류에서Dev

기본 클래스의 벡터에서 파생 클래스의 이름을 가져 오는 방법

Related 관련 기사

  1. 1

    Symfony 2/3 인터페이스를 구현하는 디렉토리에서 클래스 가져 오기

  2. 2

    클래스 이름을 구현하여 내 보낸 인터페이스 가져 오기

  3. 3

    인터페이스 메서드를 통해 인터페이스를 구현하는 클래스의 어셈블리 버전 가져 오기

  4. 4

    일반 인터페이스를 구현하는 클래스에서 "클래스가 인터페이스 멤버를 구현하지 않습니다."오류

  5. 5

    인터페이스에서 해당 인터페이스를 구현하는 클래스로 열거 형을 가져 오려면 어떻게해야합니까?

  6. 6

    인터페이스를 먼저 구현하지만 파생 클래스는없는 모든 C # 유형 가져 오기

  7. 7

    버튼 클래스 이름 또는 이름 만 가져 오기

  8. 8

    ReactiveUI, 탐색시 viewmodel에서 목록 가져 오기-viewmodel이 인터페이스를 구현하는 경우

  9. 9

    방법은 몇 가지 기본 클래스를 확장하지 않는 특정 인터페이스를 구현하는 모든 클래스를 식별?

  10. 10

    구현 된 인터페이스를 변경하지 않고 구현 클래스에 기능 추가

  11. 11

    클래스가 C #에서 상속하고 구현하는 모든 유형 및 인터페이스 가져 오기

  12. 12

    현재 클래스 이름 가져 오기

  13. 13

    Jsoup 클래스 이름 가져 오기

  14. 14

    JavaScript는 클래스 이름으로 요소 가져 오기

  15. 15

    Jquery 클래스 이름을 사용하여 값 가져 오기

  16. 16

    져지의 동적 기능 인터페이스를 구현하는 클래스 용 Junits를 작성하는 방법은 무엇입니까?

  17. 17

    가져 오기-클래스 이름이있는 div 추가 및 찾기

  18. 18

    기존 인터페이스를 구현하는 동적으로로드 된 클래스 인스턴스화

  19. 19

    기본 클래스에서 정적 인터페이스를 정의하고 인터페이스가 파생 클래스에서 구현되어야하는지 확인하는 방법은 무엇입니까?

  20. 20

    "시작"선택기를 사용하여 클래스 이름 값 가져 오기

  21. 21

    TestNG의 ITestResult 인터페이스 또는 클래스입니까? 인터페이스 어떤 클래스가이 인터페이스를 구현 했습니까?

  22. 22

    클래스 수준에서 클래스 이름 가져 오기

  23. 23

    슈퍼 클래스 또는 인터페이스 목록에서 하위 클래스 인스턴스 가져 오기

  24. 24

    클래스가 명시 적으로 특정 인터페이스를 구현하는 선언하고 있는지 알아보십시오

  25. 25

    특정 클래스를 확장하는 모든 클래스 이름 가져 오기

  26. 26

    클래스가 인터페이스를 구현하는지 확인하는 방법

  27. 27

    클래스가 C #에서 특정 인터페이스를 구현하는지 확인하는 방법

  28. 28

    클래스가 하나의 속성으로 인터페이스를 구현하는 방법은 다른 인터페이스도 구현할 수 있습니까?

  29. 29

    기본 클래스의 벡터에서 파생 클래스의 이름을 가져 오는 방법

뜨겁다태그

보관