2011-01-26 4 views
1

캐슬 액티브 레코드 'ActiveRecordBase 클래스를 db 객체의 기본 클래스로 사용합니다. 일부 개체, 나는 이러한 방법을 숨기려면,기본 클래스에서 메서드를 숨기는 방법?

MyClass clas = new MyClass(); 
clas.Number = 5; 
clas.Save(); 

문제는 : 그 날처럼 AR 패턴 케이크 활용할 수 있습니다. 어떻게해야합니까? 나는이 객체들을 위해 인터페이스를 사용하지 않는다.

Edit1 : 더 명확하게하려면 : 기본 클래스를 상속 한 10 개의 클래스가 있지만 그 중 3 개가 기본 클래스의 일부 메서드를 노출하지 않아야합니다. 이, MyClassB에 대한 그래서 예를 들면 :

MyClassB clasB = new MyClassB(); 
clasB.Number = 5; 
clasB.Save(); 

이 불가능합니다 -이 객체가 저장 할 수해서는 안된다().

편집 2 : 나는 c# hide from dervied classes some properties of base class을 읽었습니다. 나는 이것이 나쁜 접근이라는 것에 동의하지만 ActiveRecordBase를 사용해야한다. ActiveRecordBase는 간단히 수정할 수 없다. (최소한 Castle Active Record 원본을 고수하고 싶다면 적어도).

+2

숨기기로 정확히 무엇을 의미합니까? – BoltClock

+0

그래서'MyClassB'에'Number' 속성이 없어야한다는 뜻입니까? – BoltClock

답변

3

이 작업을 수행하지 마십시오.

7 개의 개체가 원하는 기능을 제공하는 한 개체에서 상속 받고 다른 개체는이 기능을 제공하지 않는 개체에서 상속하고 나머지 모든 개체는 기본 "핵심"개체에서 상속되도록 디자인을 다시 구성합니다. 그것을 마치 나무처럼 생각하십시오. 보기에서 나뭇잎을 숨기려고하는 대신 지점의 위치를 ​​간단히 변경합니다. 나는이 비유가 작동하는지 확신 할 수 없지만 그것이하는 척한다.

+0

전적으로 동의하지만 Edit2를 읽어보십시오. – IamDeveloper

+0

@StupidDeveloper : 충분합니다. 프레임 워크의 일부 요구 사항이라면 내가 필요로하는 프레임 워크를 사용하지 말 것을 제안합니다. :)하지만 실용적이지는 않습니다. 채택하는 모든 솔루션은 이상적이지 않습니다 (즉, 일부 인터페이스를 통해 액세스하고이를 노출하는 것 등). 행운을 빕니다. –

3

숨기려면 해당 기본 클래스에 속하지 않은 것일 수 있습니다. 이를 달성하기 위해 상속 계층 구조를 확장하는 것이 좋습니다.

관련 문제