2012-09-26 3 views
1

추상하는 ByRef 메서드를 구현 :내가 추상 클래스 메소드가 C#을

Public Class Base_BLL 
{ 
    Public Overridable Function Persist(ByRef x As Base_BO) As Base_BO 
    { 
    } 
} 

Public CLass ActualBLL Inherits Base_BLL 
{ 
} 

public Class Main_BO Inherits Base_BO 
{ 
} 

내가 옛날 VB 코드를 재사용하고을하고 ActualBLL 방법을 사용하여 Main_BO 클래스를 유지하려고하는 C#을 발표자 클래스가 있습니다. 하지만 컴파일 할 수 없습니다 :

ActualBLL bll = new ActualBLL() 
Main_BO bo = new Main_BO() 
bo.ID="3" 
bo = bll.Persist(ref bo) 

컴파일러는 1 비트를 좋아하지 않습니다. 그러나, VB에서 다음 줄을 잘 컴파일 : C# 컴파일러가 엄격

bo = bll.Persist(bo); 

여기 손실의 비트에있어 ...

+2

컴파일러는 무엇을 알려줍니다 (즉, 어떤 오류가 발생합니까?). – Tim

+3

그래서 당신은 cb 프로젝트에서 참조하고 사용하고있는 vb.net로 작성된 라이브러리를 가지고 있습니까? 그리고 컴파일러가 뱉어내는 오류는 무엇입니까? –

+0

"Base_BLL.Persist (ref Base_BO)에 가장 적합한 오버로드 된 메서드 일치가 잘못된 인수를 가지고 있습니다." – Milambardo

답변

4

, 당신을 위해이 캐스트를 삽입하지 않습니다.

Main_BO bo = new Main_BO() ; 
// ... 
Base_BO br = bo ; 
bo = (Main_BO) bll.Persist (ref br) ; 
+0

감사! 이것은 그것을 부 .다. VB는 내 생각을 떨쳐 버리고있었습니다! – Milambardo

+0

Option Strict는 VB.NET에서 이러한 종류의 암시 적 캐스팅을 방지합니까? – Tim

+0

예 - Strict On 옵션을 사용하면 이러한 사례를 명시 적으로 캐스팅해야합니다. –