2009-06-15 2 views
1

으로 속성을 전달하면 속성을 전달할 수 있습니다. Person.Firstname은 함수를 참조하고이 참조 형식을 통해 Person.Firstname의 특성을 읽을 수 있습니까?.NET에서 속성을 함수에 전달한 후 ref

그래서 참조 유형은 Person 클래스의 Firstname 속성뿐 아니라 문자열 인지도 알 수 있습니까?

TIA


내가 jquery.autotab을 사용하고 속성에 따라 Html.TextBox 출력에 필요한 js 코드를 추가 내 asp.net MVC 응용 프로그램에 대한 확장을 작성하려고합니다. 예를 들어

Class Person 
    <Autotab("text", maxlength:= 15)> _ 
    Property Firstname() as String 
    ... 
    End Property 
End Class 


<%= Html.TextBoxAutoTab("Person.Firstname", p.Firstname) %> 

Public Function TextBoxAutoTab(ByVal h As HtmlHelper, ByVal name As String, ByRef value As Object) As String 
+0

질문 제목과 "참조 유형"에 따라 "as ref"(또는 "by ref")를 구별해야합니다. 이 두 가지는 매우 다릅니다. –

답변

2

는 (내 의견을 참조) 제외 "REF로"문제가 대 전체 참조 형을 떠나 같은 TextBoxAutoTab의 서명이 보인다, 더는 - 방법이 없습니다 값을 매개 변수로받은 메소드에서 값이 어디서 왔는지 알려주는 역할을합니다.

은 (.NET 3.5에서는) 대신 표현식 트리를 전달한 다음 트리를 컴파일/실행하여 값을 얻고 트리가 의미하는 바를 조사합니다.

그러나 이것은 실제로 디자인 냄새입니다. 왜 이것을 알아야합니까? 무엇을 성취하려고합니까?

편집 : VB에서 참조로 속성을 전달할 때 (C#에서는 수행 할 수 없음) 실제로는 현재 값을 로컬 변수에 복사하고 참조로 해당 로컬 변수를 전달한 다음 로컬 변수의 새 값을 속성에 반환합니다. 호출 된 코드에는 원래 속성에서 나온 코드가 없습니다.

+0

내 질문을 업데이트했습니다. –

+0

예,하지만 여전히 "참조 유형"및 "참조 기준"에 대해서는 실제로 구별하지 않습니다. –

2

MVC를 사용하면 Expression 접근 방식이 일반적이지 않습니다. 따라서 여기에 Expression을 이러한 함수에 전달하고 값과 메타 데이터 (속성)를 가져 오는 방법을 보여주는 몇 가지 예제 코드가 있습니다. Expression<Func<object>> (또는 유사) ref 인수 대체

(죄송합니다, 예 C 번호는 - 내 VB 시도 지탱할 수없는)

static void Main() 
{ 
    Person p = new Person { FirstName = "abc" }; 
    MyMethod(() => p.FirstName); 
} 
public static void MyMethod(Expression<Func<object>> expression) 
{ 
    object value = expression.Compile()(); 
    Console.WriteLine("value is: " + value); 
    switch (expression.Body.NodeType) 
    { 
     case ExpressionType.MemberAccess: 
      var me = (MemberExpression)expression.Body; 
      AutotabAttribute attrib = (AutotabAttribute) 
       Attribute.GetCustomAttribute(
        me.Member, typeof(AutotabAttribute)); 
      if (attrib != null) 
      { 
       Console.WriteLine("maxlength is: " + attrib.maxlength); 
       Console.WriteLine("text is: " + attrib.text); 
      } 
      break;     
     default: 
      throw new NotSupportedException("Expression is too complex"); 
    } 
} 

그래서 당신이 TextBoxAutoTab의 과부하를 작성해야을 그 ByRef 대신 Expression...을 사용하고 위와 같은 평가를 수행하여 html을 적절하게 작성합니다.

+0

thx 나는 지금이 방법을 시도해 본다. –

관련 문제