1

여기 내 간단한 senario입니다. 인터페이스를 구현 한 클래스 (BLL 클래스)가 있습니다. 내가 원하는 것은 프리젠 테이션 레이어 내에서 사용자가 인터페이스에만 접근하고이 인터페이스로 클래스를 상호 작용하고 클래스 함수가 ​​직접 상호 작용하지 않기를 바랍니다. 거기에 어쨌든 할 수 있습니까? 수업 문제의 인터페이스 implimenttaion

내 BLL 클래스 implemeted 인터페이스 :

IOfis bll_ofis = new BLL_Ofis(); 
bll_ofis.Update(); 

을하지만이 상황에서 나는 또한이 같은 직접 클래스에 도달 할 수 있습니다 : 다음 presantatoin 층 내부

public interface IOfis 
    { 

     bool Add(Ofis ofs); 
     bool Update(Ofis ofs); 


    } 

    public class BLL_Ofis:IOfis 
    { 
     public bool Update(Ofis ofs) 
     { 
      DAL_Ofis ofs_dal = new DAL_Ofis(); 
      try 
      { 
       return ofs_dal.Update(ofs); 
      } 
      catch (Exception) 
      { 

       throw; 
      } 
      finally { ofs_dal = null; } 
     } 

     public bool Add(Ofis ofs_obj) 
     { 
      DAL_Ofis ofs_dal = new DAL_Ofis(); 
      try 
      { 
       return ofs_dal.Add(ofs_obj); 
      } 
      catch (Exception) 
      { 

       throw; 
      } 
      finally { ofs_dal = null; } 
     } 
} 

, 내가 같이 사용

BLL_Ofis bll_ofis = new BLL_Ofis(); 
bll_ofis.Update(); 

나는 그것을 원하지 않는다. 인터페이스 내부에서 선언 된 메소드에만 접근하고 싶습니다.

답변

2

내가 원하는 이유는 모르겠지만 "솔루션"은 public 메서드를 명시 적 인터페이스 구현으로 변경할 수 있습니다. 이를 수행하려면 액세스 수정 자 (여기 public)를 제거하고 메소드 이름 앞에 IOfis.을 붙입니다. 이 같은 변수의 컴파일 타임 유형은 인터페이스 유형 인 경우

public class BLL_Ofis : IOfis 
{ 
    bool IOfis.Update(Ofis ofs) 
    { 
     ... 
    } 

    ... 
} 

explicit interface implementation 만 invkoked 할 수 있습니다.

0

클래스에 Add 메소드도 구현해야합니다. 가시성에 대해서는 클래스 선언에서 public을 제거하면 동일한 어셈블리에있는 코드에만 표시됩니다.

+0

하지만 그들은 다른 dll 안에 있습니다. 즉, 다른 어셈블리를 의미합니다. – sakir

+0

나는 프리젠 테이션 레이어와 BLL을 다른 클래스 라이브러리로 사용합니다. – sakir

+0

이 경우 메소드는 공용 인터페이스를 통해서만 액세스 할 수 있습니다. 기능성 – bolistene