CallByName 을 그대로 VB.NET 으로 구현하시면 되지 않을까요? VB.NET 에서는 ByRef 예약어가 없어지지 않았을 텐데요.
그리고, ByRef 키워드는 InvokeMember 에 의해서 호출이 되더라도 여전히 유효합니다.
하지만, 그 반영이 원래의 변수에 적용되지는 않습니다.
string txt = "qwer";
int k = 5;
object [] args1 = new object[2] { txt, k };
예를 들어 위와 같은 경우에. 원래의 txt 변수 값은 변하지 않지만, args1[0] 의 값은 변화되어져 있습니다.
따라서, 반드시 기존의 Ref 규칙을 따라야 한다면 다음과 같은 식으로 object [] 에 돌려진 값들을 원래 변수에 적용시켜야 합니다
if ( args1[0] != null )
{
txt = args1[0];
}