midas+son의 크리에이티브(creative) 이야기


        /// <summary>

        /// 델리게이트(대리자) 선언

        /// </summary>

        delegate void Work();

        delegate void Work11(int num);


   static void Work_01()

        {

            Console.WriteLine("주문 받겠습니다.");

        }

        static void Work_02()

        {

            Console.WriteLine("계산 하겠습니다.");

        }

        static void Work_03()

        {

            Console.WriteLine("기다려주세요.");

        }

        static void Work_04()

        {

            Console.WriteLine("벨이 울림.");

        }

        static void Work_05(int i)

        {

            Console.WriteLine("테스트 용. {0}", i);

        }


   //메인 함수

        static void Main(string[] args)

        {

            //델리게이트 사용

            Work myWork = new Work(Work_01);    //0

            myWork += new Work(Work_02);//1

            myWork += new Work(Work_03);//2

            myWork += new Work(Work_04);//3

            myWork += new Work(Work_02); //4


            myWork();

            myWork -= new Work(Work_02); //뒤에꺼부터 없어짐 - 4가 없어짐

            myWork();


            //myWork += new Work(Work_05);  //인수가 달라서 안됨

            //인자가 있는 델리게이트 사용. 델리게이트로 동일한 형태의 인자와 리턴이 있어야 함

            Work11 myWork11 = new Work11(Work_05);

            myWork11(222);

        }

'공부 > C#' 카테고리의 다른 글

Console 커서 포지션(CursorPosition)  (0) 2016.05.08
class - is , as  (0) 2016.05.08
함수 주석 ///  (0) 2016.05.08
상속 가상 함수 선언  (0) 2016.05.08
상속 protected 접근  (0) 2016.05.08

함수 주석 ///

공부/C#2016. 5. 8. 21:35

//함수 위에서 /를 3번 입력하면 아래와 같이 자동으로 주석 공간이 생성된다.

//받는 인자값이 있거나 return값이 있으면 각각 xml형태로 주석 공간이 생성된다.


        /// <summary>

        /// 테스트 1번

        /// </summary>

        static void Test1()

        {

            Console.WriteLine("Hello Function1");

        }


        /// <summary>

        /// 함수 위에 /// (/ 세 번)해주면 인스턴스, 리턴에 따라 xml형식으로 주석 공간이 자동으로 생긴다.

        /// </summary>

        /// <param name="i">int값을 받아 사용</param>

        /// <param name="f">float값을 받아 사용. 이유 쏼라쏼라~</param>

        static void Test2(int i, float f)

        {

            Console.WriteLine("Test2 : {0} {1}", i, f);

        }


        /// <summary>

        /// 숫자를 받아와 1증가 시키는 함수

        /// </summary>

        /// <param name="num">받아올 수</param>

        /// <returns>1증가시키고 반환</returns>

        static int Test3(int num)

        {

            return ++num;

        }

'공부 > C#' 카테고리의 다른 글

class - is , as  (0) 2016.05.08
델리게이트(delegate) - 대리자  (0) 2016.05.08
상속 가상 함수 선언  (0) 2016.05.08
상속 protected 접근  (0) 2016.05.08
상속 정의  (0) 2016.05.06


//상속 가상 함수 선언

class Unit

{

public virtual void Test()    // virtual public void Test() 도 가능

{

Console.WriteLine("유닛이다.");

}

}

//virtual 선언시 주의 사항 : 

//1. private로 만들 수 없다. 접근 자체가 불가하므로 컴파일이 안됨.

//2. static으로도 만들 수 없다. 객체의 상속 관계에서 적용되는 것인다. 메모리 계속 유지되어있는 static은 재정의 할 수 없다.



//위처럼 선언된 가상 함수는 상속받은 클래스가 오버라이드(재정의) 할수 있다.

class Gunner: Unit

{

public override void Test()    // override public void Test() 도 가능

{

Console.WriteLine("거너롤세.");

}

}

//또 이를 상속받은 클래스가 다시 재정의 할 수도 있다.

class Mechanic : Gunner

{

public override void Test()    // override public void Test() 도 가능

{

Console.WriteLine("메카닉이야.");

}

}


/*

====================================

만약 재정의 하려는 의도가 아니라 

새로운 함수를 추가한 것임을 알리기 위해서는

new를 명시적으로 적어주면 된다.

====================================
*/

class Mechanic : Gunner

{

new public void Test()    // public new void Test() 도 가능

{

}

}

/*
====================================

*/


'공부 > C#' 카테고리의 다른 글

델리게이트(delegate) - 대리자  (0) 2016.05.08
함수 주석 ///  (0) 2016.05.08
상속 protected 접근  (0) 2016.05.08
상속 정의  (0) 2016.05.06
class 변수 선언 - get, set  (0) 2016.05.06

//상속 protected 접근

    class Base

    {

        public bool publicVar = true;

        protected bool protectedVar = true;


        public void PublicWrite()

        {

            Console.WriteLine("PublicWrite : {0}", publicVar);

        }


        protected void ProtectedWrite()

        {

            Console.WriteLine("ProtectedWrite : {0}", protectedVar);

        }

    }


    class Derived : Base

    {

        public void PublicWrite2()

        {

            Console.WriteLine("PublicWrite : {0}", publicVar);

        }


        public void ProtectedWrite2()

        {

            ProtectedWrite(); //부모의 protected함수에 접근

            Console.WriteLine("ProtectedWrite : {0}", protectedVar);

        }

    }

    

    class Program

    {

        static void Main(string[] args)

        {

            Base baseObj = new Base();

            Derived derived = new Derived();


            Console.WriteLine("부모 public 접근 : {0}", baseObj.publicVar);

            //Console.WriteLine("부모 protected 접근 : {0}", baseObj.protectedVar); // 에러

            Console.WriteLine("자식 public 접근 : {0}", derived.publicVar);

            //Console.WriteLine("자식 protected 접근 : {0}", derived.protectedVar); // 에러

            baseObj.PublicWrite();

            //baseObj.ProtectedWrite();     //에러

            derived.PublicWrite();    //자식으로 선언한 변수로 부모 함수(public) 접근 

            //derived.ProtectedWrite();     //에러

            derived.PublicWrite2();

            derived.ProtectedWrite2();

        }

    }


//================================================================

//protected변수, 함수는 자식만 직접 접근이 가능함을 기억하자. (c/c++/java 공통적인 기본 사항이다.)

//다른 class에서 사용하고자 한다면 자식에 public으로 접근 가능하게 우회하여야 한다.

//================================================================

'공부 > C#' 카테고리의 다른 글

함수 주석 ///  (0) 2016.05.08
상속 가상 함수 선언  (0) 2016.05.08
상속 정의  (0) 2016.05.06
class 변수 선언 - get, set  (0) 2016.05.06
Console Color  (0) 2016.05.04

상속 정의

공부/C#2016. 5. 6. 13:32

    //class MyClass2 : public MyClass1 //c++ 상속

    class MyClass2 : MyClass1   //무조건 public 상속만 가능하며 하나만 가능하다.

    {

    }


//제가 하는 포스팅은 보통 c++과 c# 차이에 대한 것만 적지 개념을 따로 정리하지 않습니다.


'공부 > C#' 카테고리의 다른 글

상속 가상 함수 선언  (0) 2016.05.08
상속 protected 접근  (0) 2016.05.08
class 변수 선언 - get, set  (0) 2016.05.06
Console Color  (0) 2016.05.04
시간 측정 Stopwatch  (0) 2016.05.04


        //아래는 c++의 사용 방법

        //  int x = 0;  //안붙이면 private:

        //public:

        //  int i = 1;

        //  int j = 2;


        //C#에서는 각각 붙여줘야 함

        public int i = 1;

        protected int j = 2;

        int k = 3; // 안붙이면 private

        private int l = 4;

        /*

        //c++에서는 아래와 같이 별도로 Get함수와 Set함수를 만들었었다.

        public int GetK()

        {

            return k;

        }

        public void SetK(int num)

        {

            k = num;

        }

        */

        public int L    //변수가 소문자면 get/set을 위한 함수는 보통 같은 글자의 대문자로 사용한다.

        {

            //겟셋

            get { return this.l; }

            set    //값을 넣을 때 별도의 처리가 가능하다

            { 

                if(value < 0)

                {

                    this.l = 0;

                }

                else if(value > 100)

                {

                    this.l = 100;

                }

                else

                {

                    this.l = value;    //value는 별도로 지정하는 것이 아니라 값을 자동으로 받아온다.

                }

            }

            /*

            //set이 없으면 읽기 전용

            get { return this.l; }

            // set { this.l = value; }

            */

        }



'공부 > C#' 카테고리의 다른 글

상속 protected 접근  (0) 2016.05.08
상속 정의  (0) 2016.05.06
Console Color  (0) 2016.05.04
시간 측정 Stopwatch  (0) 2016.05.04
반복문  (0) 2016.05.04

Console Color

공부/C#2016. 5. 4. 15:36

//Console Color

//글자색 컨트롤

Console.ForegroundColor = ConsoleColor.Green;    

//Console.ForegroundColor = (ConsoleColor)10

//글자 배경 컨트롤

Console.BackgroundColor = ConsoleColor.Red;

Console.WriteLine("선택하신 무기가 장착 되었습니다."); 

Console.ResetColor();    //기본 색상으로 돌아감(글자색 , 배경색 포함)


/*

//c++ 에서는

//SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), color); 

//위의 함수를 사용. 

//color는 2바이트 숫자를 가져옴. (WORD = unsigned short)

//16진수로 0x00~0xFF까지. 앞수가 배경, 뒷수가 글자색

*/

'공부 > C#' 카테고리의 다른 글

상속 정의  (0) 2016.05.06
class 변수 선언 - get, set  (0) 2016.05.06
시간 측정 Stopwatch  (0) 2016.05.04
반복문  (0) 2016.05.04
비트 연산  (0) 2016.05.04

//클래스 추가

using System.Diagnostics;         


//아래는 코드 추가 부분

 //시간 측정

            Stopwatch sw = new Stopwatch();    //생성

            sw.Start();    //시작


            sw.Stop();    //중지

            long time = sw.ElapsedMilliseconds;    //밀리언초 반환

            sw.Reset();    //시간리셋

            sw.Restart();    //재시작

'공부 > C#' 카테고리의 다른 글

class 변수 선언 - get, set  (0) 2016.05.06
Console Color  (0) 2016.05.04
반복문  (0) 2016.05.04
비트 연산  (0) 2016.05.04
switch  (0) 2016.05.04

반복문

공부/C#2016. 5. 4. 14:13

//반복문

int i = 0;

            while(i < 10)

            {

                ++i;

                Console.WriteLine("While : {0}", i);

            }

            i = 0;


            do

            {

                ++i;

                Console.WriteLine("Do While : {0}", i);

            } while (i < 10);


            int[] test = new int [10];

            for (int j = 0; j < test.Length; ++j)

            {

                test[j] = j;

                Console.WriteLine("For : {0}", j);


            }


            //foreach(int nn in test) //test에 들어있는 것은 nn 변수로 받겠다

            //{

            //    Console.WriteLine("Foreach : {0}", nn);

            //}


            foreach (var nn in test) //c++ 에서 auto 가 C# 에서 var로 되었다

            {

                Console.WriteLine("Foreach : {0}", nn);

            }

'공부 > C#' 카테고리의 다른 글

Console Color  (0) 2016.05.04
시간 측정 Stopwatch  (0) 2016.05.04
비트 연산  (0) 2016.05.04
switch  (0) 2016.05.04
사칙연산  (0) 2016.05.04

비트 연산

공부/C#2016. 5. 4. 14:11

 //비트 연산자 <<, >>, &, | 

            //2진법

            //<<왼쪽 시프트 - 한번 시프트에 2배 증가. 오른쪽 새로 생기는 건 0으로 처리. 왼쪽에 사라는건 날라감

            //>>오른쪽 시프트 - 한번 시프트에 절반 감소. 왼쪽에 새로 생기는건 0으로 처리. 오른쪽에 사라지는건 날라감

            int bitA = 4;   //100

            int bitB = 2;   // 10

            Console.WriteLine("bitA : {0}, bit : {1}",

                Convert.ToString(bitA, 2),  //2진수로 컨버트

                Convert.ToString(bitB, 2)); //2진수로 컨버트


            Console.WriteLine("{0} & {1} = {2}",

                Convert.ToString(bitA, 2),

                Convert.ToString(bitB, 2),

                Convert.ToString(bitA & bitB, 2));  // &연산


            Console.WriteLine("{0} | {1} = {2}",

                Convert.ToString(bitA, 2),

                Convert.ToString(bitB, 2),

                Convert.ToString(bitA | bitB, 2));  // | 연산


            //비트 플래그 - 무기장착을 예로 들어 봄

            int sword = 0x01;   //16진수 => 2진수로 0000 0001 //앞에 더있는 0000 0000 0000 0000 0000 0000 은 생략

            int staff = 0x02;   //0000 0010

            int axe = 0x04;     //0000 0100

            int spear = 0x08;   //0000 1000

            int bow = 0x10;     //0001 0000


            int weaponUsable = sword | axe | spear; //0000 1101


            if((weaponUsable & spear) != 0)

            {

                //spear가 true가 됐다

                Console.WriteLine("나는 창을 쓸 수 있다.");

            }

            else

            {

                //spear가 false가 됐다

                Console.WriteLine("나는 창을 쓸 수 없다.");

            }


            //weaponUsable : 0000 1101

            //spear를 뺴고자 한다.

            //spear : 0000 1000

            //~spear (보수)  :1111 0111

            //원하는 결과    : 0000 0101

            //weaponUsable와 spear의 보수값을 & 하면 원하는 결과가 나온다.

            weaponUsable = weaponUsable & (~spear);


            if ((weaponUsable & spear) != 0)

            {

                //spear가 true가 됐다

                Console.WriteLine("나는 창을 쓸 수 있다.");

            }

            else

            {

                //spear가 false가 됐다

                Console.WriteLine("나는 창을 쓸 수 없다.");

            }


            //1byte는 8bit => 0000 0000

            int value = 5; // 0000 0000 0000 0000 0000 0000 0000 0101

            Console.WriteLine("{0} << 2 = {1}",

                value, Convert.ToString(value << 2, 2)); // 0001 0100

            Console.WriteLine("{0} >> 2 = {1}",

                value, Convert.ToString(value >> 2, 2)); // 0000 0001

'공부 > C#' 카테고리의 다른 글

시간 측정 Stopwatch  (0) 2016.05.04
반복문  (0) 2016.05.04
switch  (0) 2016.05.04
사칙연산  (0) 2016.05.04
배열  (0) 2016.05.04