2014-12-03 2 views
1

는 다음 코드를 생각해 보자. Log()에 전달하는 방법을 모르겠습니다.는 일반 객체의 매개 변수를 액세스

다른 방법이 있습니까?

UPDATE :

나는 Log() 내부 T의 인스턴스에 액세스하려고합니다.

업데이트 2 :

음, 혼란 죄송합니다. 나는이 모든 것들에 익숙하지 않다. 나는 여기서 사물을 분명히하려고 노력할 것이다. 행사 AfterWriteOperation가 호출되는 Update 방법 내부

BarRepository.Update(entityToPersist); // Bar inherits from Foo 

: 그래서 내 저장소는 서비스 계층에서 호출 난 그냥 단순한 사실을 멀리 할 수있는 모든 것들과 함께

if (AfterWriteOperation != null) 
    AfterWriteOperation(this, e); 

위의 경우에 e 그 내 엔티티이므로 다음과 같이 로그에 전달할 수 있습니다.

(sender, local) => this.Log(local); // I will rename local to entity 

그리고 메소드 내부에서 가져옵니다.

+0

*'T' *에 액세스하는 것은 무엇을 의미합니까? 'typeof (T)'? 그렇지 않으면 단지 그것을 사용하십시오 ... –

+0

@ ta.speot.is는'void Log (T entity)'를 좋아하고 메서드 내에서 사용합니다. – DontVoteMeDown

+0

음, 그 다음에 씁니까? 왜 그게 옵션이 아닌가? 당신은'Log'를 그렇게 선언 했습니까? 'T'타입의 매개 변수를 취하는가? –

답변

1

유형에 대한 정보를 얻고 싶다면. Name, Methods, Interfaces, ...typeof(T)을 log - 인스턴스에서 .GetType() 호출과 같이 사용하고 일반 매개 변수의 유형을 반환합니다. 이 유형의 인스턴스 작업 할 경우 , 당신은

A) 인스턴스 (Activator.CreateInstance(typeof(T))) 또는

b)는 생성자를 통해 인스턴스를 전달하고 this.Log(passedInstance) 호출을 만들어야합니다.

+0

이상하게도 부분적으로 작동했습니다. ** b ** 옵션을 사용하여 인스턴스를 가져 왔지만 'null'값을 가진 모든 속성이 있습니다. – DontVoteMeDown

+0

그리고 전달하는 인스턴스의 속성 값이 있습니까? – MrWombat

+0

문제가 표시되지 않습니다. 클래스가 정의되지 않은 클래스에서 이벤트를 발생시킬 수 없습니다. 실제로 로그는 동일한 클래스 계층의 일부이므로 이벤트가 필요하지 않습니다. 내게 당신의 코드는 작동합니다 ... – MrWombat

4

void Log(T entity)과 같은 방식으로 사용하십시오.

Well just do that :

using System; 

namespace Works4Me 
{ 
    public interface ISessionFactory { } 
    public class EntityBase { } 
    public class BaseRepository<T> where T : EntityBase { } 

    public class FooRepository<T> : BaseRepository<T> 
     where T : EntityBase 
    { 
     public FooRepository(ISessionFactory sessionFactory) 
     { 
     } 

     public void Log(T entity) 
     { 
     } 
    } 

    public class Test 
    { 
     public static void Main() 
     { 
     // your code goes here 
     } 
    } 
} 

성공 #stdin 다른 문에 관해서 0.01 초 3만3천4백80킬로바이트

#stdout :

나는 인스턴스에 액세스 할 T 내부 Log().

T 그 자체는 인스턴스가 없습니다. 을 사용하는 Type 개체는 T을 나타낼 수 있습니다.

+0

글쎄, 지금은 항상 내 잘못 이었어 인스턴스를 얻을 수 있습니다. 시간 내 주셔서 감사합니다. 이 질문은 닫아야합니다. – DontVoteMeDown

관련 문제