2017년 5월 31일 수요일

[c#] WPF Event on multi Layer Control

가령 같은 공간 안에 캔버스와 버튼이 같이 있으면, 밑에 쓴 쪽으로 이벤트가 발생하게 된다.

2017년 5월 17일 수요일

[c#] c#7 pattern Matching


object temp = 4;

if(temp is string t)
{}

=> 먼저 (string)temp = t 라고 캐스팅한다.

이게 성공시 if문장 안은 데이터 타입이 string  인  t 라는 변수가 로컬 변수가 된다.

실패시 if 문 안으로 안들어 간다.

2017년 5월 16일 화요일

[c#} Lazy

1. if문에서 ||(OR) 은 Lazy가 아닌데, &&(AND)는 Lazy이다. 즉

AND는 처음 문장실행후 판별=> 다음 문장

OR은 각 문장 다 실행 => 각각 판별

이렇게 동작한다.

따라서 And가 무조건 성능상 좋다.

[c#] Console,Wirte 에서 글씨들 간격 일정하게 .

Console.Write(numbers + "\t"); 하면

1   2   3   4  ...

이런식으로 출력이 된다.

[c#] Enumerator

IEnumerable  을 구현

IEnumerator IEnumerable.GetEnumerator()
        {
            return GetEnumerator();
        }

 IEnumerator를 상속받는  GetEnumerator 를 구현을 한다.

IEnumerator를 상속받는  GetEnumerator

는 currnet  라는 오브젝트를 리턴하고, 다음에 MoveNext실행 다시 current라는 오브젝틀르 리턴하는 식으로 구동하게 된다.

여기서 MoveNext는 bool을 리턴하고, True리턴시 currnet를 반환, Fals 리턴시 Dispose라는 메소드로 가서 더이상 반환을 안하게 된다.



public class FibonacciNumbers : IEnumerable
    {
        public IEnumerator GetEnumerator()
        {
            return new FibEnumerator();
        }

        IEnumerator IEnumerable.GetEnumerator()
        {
            return GetEnumerator();
        }

       
    }

    public class FibEnumerator : IEnumerator
    {
        public FibEnumerator()
        {
            Reset();
        }

        public Int64 Current { get; private set; }

        Int64 Last { get; set; }

        object IEnumerator.Current { get { return Current; } }

        public void Dispose()
        { Console.WriteLine("Enumerator is over"); }

        public bool MoveNext()
        {
            if(Current == -1)
            {
                Current = 0;
            }
            else if(Current == 0)
            {
                Current = 1;
            }
            else if(Current == 5) return false;
            else
            {
                Int64 next = Current + Last;
                Last = Current;
                Current = next;
            }
            return true;
        }

        public void Reset()
        {
            Current = -1;
        }