2012-10-08 3 views
0

인터페이스에 약간의 문제가 있습니다. 제 수업의 무리는 ILayoutObject 인터페이스를 구현합니다. 메서드는 변수를 ILayoutObject (Nothing으로 기본값 지정)으로 선언 한 다음 개체를 결정하는 코드를 실행합니다. 문제는 변수를 매개 변수로 받아 객체를 할당하는 메소드에서 평가 코드가 실행된다는 것입니다. 객체를 사용하면 문제가되지 않습니다. 객체는 메소드의 변경에 의해 영향을받을 것이고 모든 것이 OK가 될 것입니다. 그러나 인터페이스를 사용할 때 호출 코드의 변수는 Nothing이며 일반 변수처럼 작동합니다. 누구든지 그것을 우회하는 방법에 대한 아이디어가 있습니까? 아아, 때문에 코드 구조에 내가 ByRef 또는 기능 :(여기인터페이스가 객체처럼 작동하지 않습니까?

를 사용할 수없는 나는 몇 가지 코드 : 개체를 변경하려는 경우가 ByRef로 매개 변수를 선언 할 필요가

Protected LayoutHandler As Dictionary(Of String, Action(Of Constants.OptionsEntryStructure, ILayoutElements)) = New Dictionary(Of String, Action(Of Constants.OptionsEntryStructure, ILayoutElements)) From 
    { 
    {Constants.KeyLayoutType, AddressOf KeyLayoutType} 
    } 

Sub MakeLayOuts 
    Dim LayoutElement As ILayoutElements = Nothing 
    Dim Value = "SomeValues" 
    Dim key = "Key" 
    LayoutHandler(key)(Value, LayoutElement) 
    ' LayoutElement remains nothing..... 
End Sub 

Protected Sub KeyLayoutType(elem As Constants.OptionsEntryStructure, Layout As ILayoutElements) 
    Layout = New LayoutObject 'which would implement the interface 
End Sub 
+1

'Begin Sub' ...? 확실히 VB.net은 유효한 구문을 고려하지 않습니다 ... – cHao

+0

아, 미안, 오타 ... –

답변

1

되는에 호출 코드 포인트 변수 :..

Protected Sub KeyLayoutType(elem As Constants.OptionsEntryStructure, ByRef Layout As ILayoutElements) 
    Layout = New LayoutObject 'which would implement the interface 
End Sub 

이 어떤 참조 타입 (클래스)와 사실은 그들이 인터페이스로 참조된다는 사실은 차이가 없습니다

ByRef을 사용할 수없고 함수를 사용하여 새 객체를 반환 할 수없는 경우 유일한 다른 옵션은 레이아웃 객체가있는 객체 유형을 속성으로 요청하는 것입니다. 예 :

Public Interface ILayoutElementContainer 
    Public Property LayoutElement As ILayoutElements 
End Interface 

Protected Sub KeyLayoutType(elem As Constants.OptionsEntryStructure, Container As ILayoutElementContainer) 
    Container.LayoutElement = New LayoutObject 'which would implement the interface 
End Sub 
+0

불행히도, 이것은 처리기와 충돌합니다. 이 오류 메시지의 요지는 서명 미스 매치이며 처리기에 byref를 추가하는 방법을 알 수 없습니다 ... –

+0

죄송합니다. 죄송합니다. 귀하의 질문을 너무 빨리 읽고 ByRef를 사용할 수 없다고 말한 부분을 놓쳤습니다. 내 업데이트 답변을 참조하십시오. –

+0

thx - 내 접근 방식 중 하나에서 작동하지 않습니다 :/단순히 컨테이너도 다른 서명이기 때문에. 내가 뭔가를 자갈을 맺어야하는 것 같아 ... –

관련 문제