원하지 않는 메소드의 상속..

ex)
어떤 값을 저장하고 보여주는
ArrayList라는 클래스를 상속받아서
MyArrayList라는 클래스를 만들었음


 
public class MyLIst : ArrayList
{
     public void add(object obj)
     {
          base.Add(ojb);
     }
     public object pop(int index)
     {
          return base[index];
     }
}

근데 이걸 또 어떤 사람이 가져다 사용

근데 이걸 사용하다 보니
값을 없앨일이 생겨서
. 찍고 인텔리센스를 보니
clear() 메소드가 있음

그래서 사용하지만.
이건 사용자가 원하는데로 동작을 하지 않아요.

MyList에 있는 메소드가 아니라. ArrayList에서 상속받아진 메소드이기 때문에!
by 피요히코~ 2009. 10. 15. 10:13
뭐. WPF에서도 될꺼 같긴 한데요. 일단 해본게 실버라이트니...

실버라이트는 파일이 두개로 나눠져 있죠.
(엄밀히 말하면 세개려나요..)
*.xaml
*.xaml.cs
*.g.cs <<- 요녀석은 프로젝트폴더의 obj폴더 안의 degug안에 뒤져보면 있어요.

실버라이트의 모든 페이지는 UserControl을 상속받잖아요.
근데 만약에
UserControl을 상속받은 다른 Class를 만든후에
그 Class를 상속받는 페이지를 만들고 싶을때!

단순하게
*.xaml.cs쪽에서 (만들어놓은 class명이 myUserControl 일경우
public partial class control1 : myUesrControl
이라고 하면 될듯 싶지만.
이게 잘 안되네요

왜냐.
이녀석들이 빌드되면서
xaml코드에 맞는 parial class를 자동생성해 주는데
(이놈이 *.g.cs)
여기는 상속받는 class가 UserControl로 되어있어요

partial class가 서로 상속받는 class가 다르니
꺼지라고 오류가 나옵니다.

이거때문에 한참 찾고 이거저거 해봤는데.
시베리아에서 답을 찾았네요. (찬용님 ㄳㄳ~~~)

방법은
하고나니 간단합니다. ㅠㅠㅋ

*.xaml코드를 보면. 시작태그가 있잖아요.
<Usercontrol x:Class="......
.........</Usercontrol>


이녀석을 바꿔주면 됩니다.
cs쪽에서 using하고 상속받고 하는거랑 비슷하네요

이름은 임의로 정할수 있어요
<tempControl:myUsercontrol 
 xmlns:tempControl="myUsercontrol의 네임스페이스"
 (나머지코드는 동일)........
......</tempControl:myUsercontrol>

이렇게 바꿔주면 되네요.

휴..
하고나니 이렇게 간단한걸. ㅠㅠ

by 피요히코~ 2009. 10. 14. 15:39
| 1 |