SlideShare una empresa de Scribd logo
1 de 40
C# 빠르게 익히
기




 AI Lab 학부 연구생 - 최길우
OBJECTIVE.
   예제를 통해 C# 코드를 이해 함으로써, 다른 C#코드
    를 볼 때 이해 할 수 있도록 하기 위한 자료.

   특정 기능들의 틀 부분만 설명.

   기존 언어들과 다른 문법과 새로운 기능 위주로 설명.
HELLO WORLD ?
Using System;

Namespace classname
{
  class Program
  {
       public void main(String[] args)
       {
               Console.WriteLine(“Hello World!”);
       }
  }
}
NAME SPACE
Using System;

-   C++의 namespace와 같은 개념.
-   System class의 메소드를 사용 가능하게 해준다.
-   C 의 include<stdio.h> Java의 import와 같은 개념.
-   Using을 통해 C#에서 제공하는 클래스를 활용 할 수
    있다.

Ex) Console.WriteLine(“Hello World!”);

Namespace를 선언 하지 않았다면
>> System.Console.WriteLine(“Hello World!”);
CONSOLE.WRITELINE
int a = 10;
float b = 2.5f;
String c = “Hello World”;

   Printf(“%d %f %s”, a, b, c);

   Console.WriteLine(“first parm is {0}, second is {1}, else
    {2}”, a, b, c);

-   데이터 타입을 %로 설정 할 필요 없이 자동으로 그 타입
    에 맞게 바인딩 되어 출력한다.

※ 입력은 변수 = Console.ReadLine(); 로 할 수 있다.
FOR EACH
Int[] values = {1, 2, 3, 4, 5};

Foreach(int a in values)
{
  Console.WriteLine(a);
}
REF
public static void Swap(ref int a, ref int b)
{
        int temp = a;
        a = b;
        b = temp;
}
static void Main(string[] args)
{
        int a = 3;
        int b = 4;
        Swap(ref a, ref b);
}
OUT
public static void Swap(out int a, out int b)
{
        //error
        //int temp = a;
        //a = b;
        //b = temp;
}
static void Main(string[] args)
{
        int a = 3;
        int b = 4;
        Swap(ref a, ref b);
}
OUT VS REF
   공통점 : 둘 다 참조에 의한 매개변수 전달

 차이
-ref : 변수에 반드시 초기값을 주어야 한다.
-out : out변수를 r-value로 주지 못한다.

뒤에 코드 error 고친다면
a = (out이 아닌 다른 변수나 상수 값); //b either
가변길이 매개변수
Public static float GetAverage(params float[] args)
{
        float mean = 0;
        for(int i=0; i<args.Length; i++)
        {
                 mean += args[i];
        }
        return mean / args.Length;
}
Public static void Main()
{
        float result = GetAverage(177.3f, 172.1f, 165.3f);
        Console.WriteLine(“The Average {0} cm”, result);
}
상속 그리고 오버라이딩
    Class Child : Parent 의 형식

    함수 재정의 종류
1.    new 키워드 이용.
2.    virtual, overide 키워드 이용.

-     New : 상위 클래스 함수 완전 무시(Hiding)
-     Overide : 상위 클래스에서 virtual로 표시된 함수 재
      정의
오버라이딩 예제(NEW)
Class Shape
  public void Draw()
       Console.WriteLine(“Shape method!”);

Class Triangle : Shape
  public new void Draw()
        Console.WriteLine(“Triangle method!”);
        base.Draw();

Class NewBase
  public static void Main()
        Shape s = new Shape();
        s.Draw();
        Triangle t = new Triangle();
        t.Draw();
오버라이딩 결과(NEW)
Shape method!
Triangle method!
Shape method!

표현하자면,,
Class Trangle
Draw(Hide base class)
Draw
Trangle
오버라이딩 예제2 (OVERIDE, ABSTRACT 연산
자)
Abstract class Computer
  public abstract void Network();
  public void Graphic()
       Console.WriteLine(“Graphic OK.”);

Class NewComputer : Computer
  public override void Network()
       Console.WriteLine(“Network OK.”);

Class Override
  public static void Main()
       Computer c = new NewComputer();
       c.Graphic();
       c.Network();
오버라이딩 예제2 결과
Graphic OK.
Network OK.
오버라이딩 예제3 (OVERIDE, VIRTUAL 연산
자)
class Compute
   public void Graphic()
           Console.WriteLine("Graphic OK.");
   public virtual void Network()
           Console.WriteLine("base Network OK");

class NewComputer : Computer
   public override void Network()
          Console.WriteLine("derived Network OK.");

class Program
      public static void Main(string[] args)
           Computer c = new Computer();
            c.Graphic();
           c.Network();
           Computer n = new NewComputer();
           n.Graphic();
           n.Network();
오버라이딩 예제3 결과
Graphic OK.
Base Network OK.

Graphic OK.
Derived Network OK.
상수 선언
Class의 맴버 변수로 선언한다면 ..

- Public const float PI = 3.14;
>> 무조건 처음에 초기화 해주어야 한다.
(컴파일 할 때 값이 결정 된다.)

- Public readonly float PI;
  생성자()
  {
   this.PI = 3.14;
 }
>> 인스턴스가 생성될때 값을 정할 수 있다.
IS, AS 연산자
Is 연산자 : T/F 반환
As 연산자 : T일경우 해당하는 클래스 명 반환

사용법 : 문장 is/as 비교할자료형.

ex) Interface 포유류
     class 고양이과 : 포유류
     class 사자 : 포유류, 고양이과

포유류 simba = new 사자();
//simba is/as 고양이과?

고양이과 leo = new 고양이과();
//leo is/as 사자?
상속관계




 사자   고양이과포유류
분할 클래스
한 클래스를 여러 번에 나누어서 구현 할 수 있다.
Partial class classname
{
  Method1(){}
}
Partial class classname
{
  Method2(){}
}
배열 그리고 컬렉션
   배열의 선언 형태는 자바와 비슷하다.

   자바와 같이 C#에서도 다양한 배열의 구조적/기능적
    인 한계를 보완하는 자료구조를 제공하고 있다.
    ArrayList, HashTable과 같은 기능을 제공하며
    Using System.Collections를 선언해서 사용할 수
    있다.



-   사용 방법은 C# API 참조
속성(PROPERTY)
- Property는 클래스나 데이터의 필드에 접근해서 값을 저장하거나 읽어오는
   데 사용하는 요소.
- Attribute는 코드를 설명하기 위해 사용되는 요소.

Class NameCard
   private string name;
   public void setName(string name)

  public string Name
  {
         get{return name;}
         set{name = value;}
  }

NameCard myCard = new NameCard();
myCard.Name = “최길우”//set
Console.WriteLine(myCard.Name);//get
인덱서(INDEXER)
   속성 : 맴버필드 접근
   인덱서 : 배열에 접근

Private string[] name;

Public string this[int i]
{
  get{return name[i];}
  set{name[i] = value;}
}

Name[0] = “김제민”;
Name[1] = “최길우”;
Console.WriteLine(Name[0]);
…

속성과 인덱서 : 클래스나 객체의 데이터를 안전하게 읽고 쓸 수 있는 메커니
 즘.
DELEGATE(델리게이트)
   뜻 : 대리자, 즉 다른 method에 대한 참조를 가지고 있다
    가 델리게이트를 호출하면 자신이 참조하고 있는 메소드
    실행.

   함수를 캡슐화 해서 호출, C언어의 함수포인터 개념과 비
    슷하며 이벤트나 쓰레드를 통해서 많이 사용한다.

Public delegate void PrintOut(String s); //델리게이트 선언
Public static void WriteToConsole(String s)
{
  Console.WriteLine(s);
}

PrintOut print = new PrintOut(WriteToConsole);
print(“PrintOut 호출 >> 다시 WriteToConsole 호출”);
델리게이트 익명 메소드
//선언
Public delegate void PrintOut(String s);

//정의
PrintOut print = delegate(string s)
  {
      Console.WriteLine(s);
  }

Print(“Anonym-method is very simple, isn’t it?”);
델리게이트의 합성
Public delegate void MyDelegate;

MyDelegate A,B,C,D;
A=new MyDelegate(SomeMethod);
B=new MyDelegate(SomeOther);
C=A+B;//A다음에 B실행
D=C-B;//A+B-B 즉 A만 실행
이벤트
C#의 이벤트 처리는 델리게이트에 기반하고 있다.

-이유?
Event a = 마우스 누르고 손 떼지 않기(mouse pressed)
Event b = 마우스 누르고 손 떼기(mouse release)

Event c = 마우스 클릭(=a+b)
Evend d = c 두번.
이벤트 예제
class Client

private int ID;

public delegate void ClientService(object sender, EventArgs args);
public event ClientService Service;

public Client(int ID) //constructor
  this.ID = ID;

public int ClientID //Property
  get { return this.ID; }

Public void FireEvent()
  if(Service != null)
          EventArgs args = new EventArgs();
          Service(this, args);
이벤트 예제 계속
Class MainApp
 public static void OnEvent(object sender, Event Args args)
       Client client = (Client)sender;
       Console.WriteLine(“고객ID {0} : 경품 당첨”, client.ClientID);


 public static void Main()
       Client clientA = new Client(1);
       clientA.Service += new Client.ClientService(OnEvent);
       clientA.FireEvent();
이벤트의 처리 경로
   Event Sender (Client)

         FireEvent();

   Event Receiver (MainApp)



   Event Handler (OnEvent(object sender, Event Args
    args))
ATTRIBUTE(특성), GENERIC(일반화)
 코드 안의 요소(메소드, 속성, 필드 등)에 대한 설명
  을 담는 객체.
 런타임에도 읽을 수 있는 주석.

1. Obsolate

2. Conditional

3. DLL import

- 세가지 방법이 있으며 많이 사용하지 않으므로 자
   세한 것은 C#서적 참조.

-  C++, Java에서 제공하는 Templet과 비슷하므로 필
   요할때 서적 참조
<class>
파일 조작
Using System.IO

FileInfo fileInfo = new FileInfo(@“C:test.txt”);

If(fileInfo.Exists)
{
   Console.WriteLine(fileInfo.Directory);
   …
   fileInfo.Name, Length..
}

파일조작에 대한 메소드나 속성은 MSDN 참조..
FILE I/O   - BYTE
using System.IO;
using System.Text;

FileStream fStream = File.OpenWrite(@“C:text.txt”);
Byte [] output = new Byte[11] { 72, 101, … };
fStream.Write(output, 0, output.Length);
fStream.close();

FileStream fStream = File.OpenRead(@“C:text.txt”);
Byte [] input = new Byte[fStream.Length];
fStream.Read(input, 0, input.Length);
FILE I/O(STREAM) - READ
Using System.IO;
Using System.Text;

Stream stream = File.OpenRead(@”C:test.txt”);
StreamReader sr =
new StreamReader(stream, Encoding.Default);

String str;
Int i = 0;

While((str = stream.ReadLine()) != null)
{
   i++;
   Console.WriteLine(“Line {0}: {1}”, i, str);
}

Sr.Position = 0;
Str = streamReader.ReadLine();
Console.WriteLine(“Line {0} : {1}”, i, str);
sr.close();
FILE I/O(STREAM) - WRITE
Using System.IO;
Using System.Text;

StreamWriter sw =
  new StreamWriter(@”C:test.txt”, true, Encoding.Default);
  sw.WriteLine(“true = 내용 더하기”);


sw.close();
FILE I/O(STREAM) - BINARY
Using system.IO;
Using system.Text;

Stream stream = File.OpenWrite(@”C:test.txt”);
BinaryWriter bw = new BinaryWriter(stream);

Bw.Write(1004);
Stream.Close();

stream = File.OpenRead(@”C:test.txt”);
BinaryReader br = new BinaryReader(stream);

Int32 input = binaryReader.ReadInt32();
Console.WriteLine(input);
Stream.Close();
DB CONNECT
String strCnn;
MySqlConnection oCnn = null;

Try
      strCnn = "data source=localhost;database=test; user
         id=root;password=root";
      oCnn = new MySqlConnection(strCnn);
      oCnn.Open();

catch (MySqlException _e)
  Console.WriteLine(_e.Message);

String squery = “select * from test;”;
…
Insert into test values( …)
DB CONNECT & HANDLE.
앞의 예제보다 최근에 코딩할 때는 Helper를 쓰는 경
 향이 많다.
코드 수가 적고 편하기 때문에 ..

string strCnn = "data source=localhost;database=test; user
   id=root;password=root";
string query = "insert into test values(23, "Chris");";

DataSet ds = MySqlHelper.ExecuteDataset(strCnn, query);

…
Q&A

Más contenido relacionado

La actualidad más candente

[TechDays Korea 2015] 녹슨 C++ 코드에 모던 C++로 기름칠하기
[TechDays Korea 2015] 녹슨 C++ 코드에 모던 C++로 기름칠하기[TechDays Korea 2015] 녹슨 C++ 코드에 모던 C++로 기름칠하기
[TechDays Korea 2015] 녹슨 C++ 코드에 모던 C++로 기름칠하기Chris Ohk
 
자바8 람다식 소개
자바8 람다식 소개자바8 람다식 소개
자바8 람다식 소개beom kyun choi
 
C++ Advanced 강의 3주차
C++ Advanced 강의 3주차C++ Advanced 강의 3주차
C++ Advanced 강의 3주차HyunJoon Park
 
불어오는 변화의 바람, From c++98 to c++11, 14
불어오는 변화의 바람, From c++98 to c++11, 14 불어오는 변화의 바람, From c++98 to c++11, 14
불어오는 변화의 바람, From c++98 to c++11, 14 명신 김
 
Modern C++의 타입 추론과 람다, 컨셉
Modern C++의 타입 추론과 람다, 컨셉Modern C++의 타입 추론과 람다, 컨셉
Modern C++의 타입 추론과 람다, 컨셉HyunJoon Park
 
스파르탄스터디 E04 Javascript 객체지향, 함수형 프로그래밍
스파르탄스터디 E04 Javascript 객체지향, 함수형 프로그래밍스파르탄스터디 E04 Javascript 객체지향, 함수형 프로그래밍
스파르탄스터디 E04 Javascript 객체지향, 함수형 프로그래밍Young-Beom Rhee
 
[NDC2015] C++11 고급 기능 - Crow에 사용된 기법 중심으로
[NDC2015] C++11 고급 기능 - Crow에 사용된 기법 중심으로[NDC2015] C++11 고급 기능 - Crow에 사용된 기법 중심으로
[NDC2015] C++11 고급 기능 - Crow에 사용된 기법 중심으로Jaeseung Ha
 
자바8 람다 나머지 공개
자바8 람다 나머지 공개자바8 람다 나머지 공개
자바8 람다 나머지 공개Sungchul Park
 
객체 지향 발담그기 JCO 컨퍼런스 14회
객체 지향 발담그기 JCO 컨퍼런스 14회객체 지향 발담그기 JCO 컨퍼런스 14회
객체 지향 발담그기 JCO 컨퍼런스 14회beom kyun choi
 
[C++ Korea] Effective Modern C++ Study, Item 1 - 3
[C++ Korea] Effective Modern C++ Study, Item 1 - 3[C++ Korea] Effective Modern C++ Study, Item 1 - 3
[C++ Korea] Effective Modern C++ Study, Item 1 - 3Chris Ohk
 
Javascript 교육자료 pdf
Javascript 교육자료 pdfJavascript 교육자료 pdf
Javascript 교육자료 pdfHyosang Hong
 
Javascript 함수(function) 개념, 호출패턴, this, prototype, scope
Javascript 함수(function) 개념, 호출패턴, this, prototype, scopeJavascript 함수(function) 개념, 호출패턴, this, prototype, scope
Javascript 함수(function) 개념, 호출패턴, this, prototype, scopeYoung-Beom Rhee
 
Javascript 실행 가능한 코드(Executable Code)와 실행 콘텍스트(Execution Context), Lexical En...
Javascript 실행 가능한 코드(Executable Code)와 실행 콘텍스트(Execution Context), Lexical En...Javascript 실행 가능한 코드(Executable Code)와 실행 콘텍스트(Execution Context), Lexical En...
Javascript 실행 가능한 코드(Executable Code)와 실행 콘텍스트(Execution Context), Lexical En...Young-Beom Rhee
 
[C++ Korea 3rd Seminar] 새 C++은 새 Visual Studio에, 좌충우돌 마이그레이션 이야기
[C++ Korea 3rd Seminar] 새 C++은 새 Visual Studio에, 좌충우돌 마이그레이션 이야기[C++ Korea 3rd Seminar] 새 C++은 새 Visual Studio에, 좌충우돌 마이그레이션 이야기
[C++ Korea 3rd Seminar] 새 C++은 새 Visual Studio에, 좌충우돌 마이그레이션 이야기Chris Ohk
 
스위프트 성능 이해하기
스위프트 성능 이해하기스위프트 성능 이해하기
스위프트 성능 이해하기Yongha Yoo
 
프론트엔드스터디 E05 js closure oop
프론트엔드스터디 E05 js closure oop프론트엔드스터디 E05 js closure oop
프론트엔드스터디 E05 js closure oopYoung-Beom Rhee
 
C++20 Key Features Summary
C++20 Key Features SummaryC++20 Key Features Summary
C++20 Key Features SummaryChris Ohk
 
자바8 스트림 API 소개
자바8 스트림 API 소개자바8 스트림 API 소개
자바8 스트림 API 소개beom kyun choi
 

La actualidad más candente (20)

[TechDays Korea 2015] 녹슨 C++ 코드에 모던 C++로 기름칠하기
[TechDays Korea 2015] 녹슨 C++ 코드에 모던 C++로 기름칠하기[TechDays Korea 2015] 녹슨 C++ 코드에 모던 C++로 기름칠하기
[TechDays Korea 2015] 녹슨 C++ 코드에 모던 C++로 기름칠하기
 
자바8 람다식 소개
자바8 람다식 소개자바8 람다식 소개
자바8 람다식 소개
 
C++ Advanced 강의 3주차
C++ Advanced 강의 3주차C++ Advanced 강의 3주차
C++ Advanced 강의 3주차
 
불어오는 변화의 바람, From c++98 to c++11, 14
불어오는 변화의 바람, From c++98 to c++11, 14 불어오는 변화의 바람, From c++98 to c++11, 14
불어오는 변화의 바람, From c++98 to c++11, 14
 
Modern C++의 타입 추론과 람다, 컨셉
Modern C++의 타입 추론과 람다, 컨셉Modern C++의 타입 추론과 람다, 컨셉
Modern C++의 타입 추론과 람다, 컨셉
 
Java8 람다
Java8 람다Java8 람다
Java8 람다
 
스파르탄스터디 E04 Javascript 객체지향, 함수형 프로그래밍
스파르탄스터디 E04 Javascript 객체지향, 함수형 프로그래밍스파르탄스터디 E04 Javascript 객체지향, 함수형 프로그래밍
스파르탄스터디 E04 Javascript 객체지향, 함수형 프로그래밍
 
[NDC2015] C++11 고급 기능 - Crow에 사용된 기법 중심으로
[NDC2015] C++11 고급 기능 - Crow에 사용된 기법 중심으로[NDC2015] C++11 고급 기능 - Crow에 사용된 기법 중심으로
[NDC2015] C++11 고급 기능 - Crow에 사용된 기법 중심으로
 
자바8 람다 나머지 공개
자바8 람다 나머지 공개자바8 람다 나머지 공개
자바8 람다 나머지 공개
 
객체 지향 발담그기 JCO 컨퍼런스 14회
객체 지향 발담그기 JCO 컨퍼런스 14회객체 지향 발담그기 JCO 컨퍼런스 14회
객체 지향 발담그기 JCO 컨퍼런스 14회
 
[C++ Korea] Effective Modern C++ Study, Item 1 - 3
[C++ Korea] Effective Modern C++ Study, Item 1 - 3[C++ Korea] Effective Modern C++ Study, Item 1 - 3
[C++ Korea] Effective Modern C++ Study, Item 1 - 3
 
Javascript 교육자료 pdf
Javascript 교육자료 pdfJavascript 교육자료 pdf
Javascript 교육자료 pdf
 
Javascript 함수(function) 개념, 호출패턴, this, prototype, scope
Javascript 함수(function) 개념, 호출패턴, this, prototype, scopeJavascript 함수(function) 개념, 호출패턴, this, prototype, scope
Javascript 함수(function) 개념, 호출패턴, this, prototype, scope
 
자바 8 학습
자바 8 학습자바 8 학습
자바 8 학습
 
Javascript 실행 가능한 코드(Executable Code)와 실행 콘텍스트(Execution Context), Lexical En...
Javascript 실행 가능한 코드(Executable Code)와 실행 콘텍스트(Execution Context), Lexical En...Javascript 실행 가능한 코드(Executable Code)와 실행 콘텍스트(Execution Context), Lexical En...
Javascript 실행 가능한 코드(Executable Code)와 실행 콘텍스트(Execution Context), Lexical En...
 
[C++ Korea 3rd Seminar] 새 C++은 새 Visual Studio에, 좌충우돌 마이그레이션 이야기
[C++ Korea 3rd Seminar] 새 C++은 새 Visual Studio에, 좌충우돌 마이그레이션 이야기[C++ Korea 3rd Seminar] 새 C++은 새 Visual Studio에, 좌충우돌 마이그레이션 이야기
[C++ Korea 3rd Seminar] 새 C++은 새 Visual Studio에, 좌충우돌 마이그레이션 이야기
 
스위프트 성능 이해하기
스위프트 성능 이해하기스위프트 성능 이해하기
스위프트 성능 이해하기
 
프론트엔드스터디 E05 js closure oop
프론트엔드스터디 E05 js closure oop프론트엔드스터디 E05 js closure oop
프론트엔드스터디 E05 js closure oop
 
C++20 Key Features Summary
C++20 Key Features SummaryC++20 Key Features Summary
C++20 Key Features Summary
 
자바8 스트림 API 소개
자바8 스트림 API 소개자바8 스트림 API 소개
자바8 스트림 API 소개
 

Similar a Ai C#세미나

Api design for c++ 6장
Api design for c++ 6장Api design for c++ 6장
Api design for c++ 6장Ji Hun Kim
 
About Visual C++ 10
About  Visual C++ 10About  Visual C++ 10
About Visual C++ 10흥배 최
 
카사 공개세미나1회 W.E.L.C.
카사 공개세미나1회  W.E.L.C.카사 공개세미나1회  W.E.L.C.
카사 공개세미나1회 W.E.L.C.Ryan Park
 
Swift3 subscript inheritance initialization
Swift3 subscript inheritance initializationSwift3 subscript inheritance initialization
Swift3 subscript inheritance initializationEunjoo Im
 
SpringCamp 2013 : About Jdk8
SpringCamp 2013 : About Jdk8SpringCamp 2013 : About Jdk8
SpringCamp 2013 : About Jdk8Sangmin Lee
 
읽기 좋은 코드가 좋은 코드다 Part one
읽기 좋은 코드가 좋은 코드다   Part one읽기 좋은 코드가 좋은 코드다   Part one
읽기 좋은 코드가 좋은 코드다 Part oneJi Hun Kim
 
Effective c++(chapter 5,6)
Effective c++(chapter 5,6)Effective c++(chapter 5,6)
Effective c++(chapter 5,6)문익 장
 
Boost라이브러리의내부구조 20151111 서진택
Boost라이브러리의내부구조 20151111 서진택Boost라이브러리의내부구조 20151111 서진택
Boost라이브러리의내부구조 20151111 서진택JinTaek Seo
 
Effective c++ chapter1 2_dcshin
Effective c++ chapter1 2_dcshinEffective c++ chapter1 2_dcshin
Effective c++ chapter1 2_dcshinDong Chan Shin
 
Angular2 가기전 Type script소개
 Angular2 가기전 Type script소개 Angular2 가기전 Type script소개
Angular2 가기전 Type script소개Dong Jun Kwon
 
일단 시작하는 코틀린
일단 시작하는 코틀린일단 시작하는 코틀린
일단 시작하는 코틀린Park JoongSoo
 
Java Virtual Machine, Call stack, Java Byte Code
Java Virtual Machine, Call stack, Java Byte CodeJava Virtual Machine, Call stack, Java Byte Code
Java Virtual Machine, Call stack, Java Byte CodeJavajigi Jaesung
 
C++ 11 에 대해서 쉽게 알아봅시다 1부
C++ 11 에 대해서 쉽게 알아봅시다 1부C++ 11 에 대해서 쉽게 알아봅시다 1부
C++ 11 에 대해서 쉽게 알아봅시다 1부Gwangwhi Mah
 
Processing 기초 이해하기_20160713
Processing 기초 이해하기_20160713Processing 기초 이해하기_20160713
Processing 기초 이해하기_20160713Yong Joon Moon
 
C#을 사용한 빠른 툴 개발
C#을 사용한 빠른 툴 개발C#을 사용한 빠른 툴 개발
C#을 사용한 빠른 툴 개발흥배 최
 
안드로이드 세미나
안드로이드 세미나안드로이드 세미나
안드로이드 세미나ang0123dev
 

Similar a Ai C#세미나 (20)

Api design for c++ 6장
Api design for c++ 6장Api design for c++ 6장
Api design for c++ 6장
 
About Visual C++ 10
About  Visual C++ 10About  Visual C++ 10
About Visual C++ 10
 
Changes in c++0x
Changes in c++0xChanges in c++0x
Changes in c++0x
 
카사 공개세미나1회 W.E.L.C.
카사 공개세미나1회  W.E.L.C.카사 공개세미나1회  W.E.L.C.
카사 공개세미나1회 W.E.L.C.
 
Swift3 subscript inheritance initialization
Swift3 subscript inheritance initializationSwift3 subscript inheritance initialization
Swift3 subscript inheritance initialization
 
SpringCamp 2013 : About Jdk8
SpringCamp 2013 : About Jdk8SpringCamp 2013 : About Jdk8
SpringCamp 2013 : About Jdk8
 
읽기 좋은 코드가 좋은 코드다 Part one
읽기 좋은 코드가 좋은 코드다   Part one읽기 좋은 코드가 좋은 코드다   Part one
읽기 좋은 코드가 좋은 코드다 Part one
 
Effective c++(chapter 5,6)
Effective c++(chapter 5,6)Effective c++(chapter 5,6)
Effective c++(chapter 5,6)
 
Boost라이브러리의내부구조 20151111 서진택
Boost라이브러리의내부구조 20151111 서진택Boost라이브러리의내부구조 20151111 서진택
Boost라이브러리의내부구조 20151111 서진택
 
Effective c++ chapter1 2_dcshin
Effective c++ chapter1 2_dcshinEffective c++ chapter1 2_dcshin
Effective c++ chapter1 2_dcshin
 
Angular2 가기전 Type script소개
 Angular2 가기전 Type script소개 Angular2 가기전 Type script소개
Angular2 가기전 Type script소개
 
일단 시작하는 코틀린
일단 시작하는 코틀린일단 시작하는 코틀린
일단 시작하는 코틀린
 
강의자료 2
강의자료 2강의자료 2
강의자료 2
 
함수적 사고 2장
함수적 사고 2장함수적 사고 2장
함수적 사고 2장
 
C++에서 Objective-C까지
C++에서 Objective-C까지C++에서 Objective-C까지
C++에서 Objective-C까지
 
Java Virtual Machine, Call stack, Java Byte Code
Java Virtual Machine, Call stack, Java Byte CodeJava Virtual Machine, Call stack, Java Byte Code
Java Virtual Machine, Call stack, Java Byte Code
 
C++ 11 에 대해서 쉽게 알아봅시다 1부
C++ 11 에 대해서 쉽게 알아봅시다 1부C++ 11 에 대해서 쉽게 알아봅시다 1부
C++ 11 에 대해서 쉽게 알아봅시다 1부
 
Processing 기초 이해하기_20160713
Processing 기초 이해하기_20160713Processing 기초 이해하기_20160713
Processing 기초 이해하기_20160713
 
C#을 사용한 빠른 툴 개발
C#을 사용한 빠른 툴 개발C#을 사용한 빠른 툴 개발
C#을 사용한 빠른 툴 개발
 
안드로이드 세미나
안드로이드 세미나안드로이드 세미나
안드로이드 세미나
 

Ai C#세미나

  • 1. C# 빠르게 익히 기 AI Lab 학부 연구생 - 최길우
  • 2. OBJECTIVE.  예제를 통해 C# 코드를 이해 함으로써, 다른 C#코드 를 볼 때 이해 할 수 있도록 하기 위한 자료.  특정 기능들의 틀 부분만 설명.  기존 언어들과 다른 문법과 새로운 기능 위주로 설명.
  • 3. HELLO WORLD ? Using System; Namespace classname { class Program { public void main(String[] args) { Console.WriteLine(“Hello World!”); } } }
  • 4. NAME SPACE Using System; - C++의 namespace와 같은 개념. - System class의 메소드를 사용 가능하게 해준다. - C 의 include<stdio.h> Java의 import와 같은 개념. - Using을 통해 C#에서 제공하는 클래스를 활용 할 수 있다. Ex) Console.WriteLine(“Hello World!”); Namespace를 선언 하지 않았다면 >> System.Console.WriteLine(“Hello World!”);
  • 5. CONSOLE.WRITELINE int a = 10; float b = 2.5f; String c = “Hello World”;  Printf(“%d %f %s”, a, b, c);  Console.WriteLine(“first parm is {0}, second is {1}, else {2}”, a, b, c); - 데이터 타입을 %로 설정 할 필요 없이 자동으로 그 타입 에 맞게 바인딩 되어 출력한다. ※ 입력은 변수 = Console.ReadLine(); 로 할 수 있다.
  • 6. FOR EACH Int[] values = {1, 2, 3, 4, 5}; Foreach(int a in values) { Console.WriteLine(a); }
  • 7. REF public static void Swap(ref int a, ref int b) { int temp = a; a = b; b = temp; } static void Main(string[] args) { int a = 3; int b = 4; Swap(ref a, ref b); }
  • 8. OUT public static void Swap(out int a, out int b) { //error //int temp = a; //a = b; //b = temp; } static void Main(string[] args) { int a = 3; int b = 4; Swap(ref a, ref b); }
  • 9. OUT VS REF  공통점 : 둘 다 참조에 의한 매개변수 전달  차이 -ref : 변수에 반드시 초기값을 주어야 한다. -out : out변수를 r-value로 주지 못한다. 뒤에 코드 error 고친다면 a = (out이 아닌 다른 변수나 상수 값); //b either
  • 10. 가변길이 매개변수 Public static float GetAverage(params float[] args) { float mean = 0; for(int i=0; i<args.Length; i++) { mean += args[i]; } return mean / args.Length; } Public static void Main() { float result = GetAverage(177.3f, 172.1f, 165.3f); Console.WriteLine(“The Average {0} cm”, result); }
  • 11. 상속 그리고 오버라이딩  Class Child : Parent 의 형식  함수 재정의 종류 1. new 키워드 이용. 2. virtual, overide 키워드 이용. - New : 상위 클래스 함수 완전 무시(Hiding) - Overide : 상위 클래스에서 virtual로 표시된 함수 재 정의
  • 12. 오버라이딩 예제(NEW) Class Shape public void Draw() Console.WriteLine(“Shape method!”); Class Triangle : Shape public new void Draw() Console.WriteLine(“Triangle method!”); base.Draw(); Class NewBase public static void Main() Shape s = new Shape(); s.Draw(); Triangle t = new Triangle(); t.Draw();
  • 13. 오버라이딩 결과(NEW) Shape method! Triangle method! Shape method! 표현하자면,, Class Trangle Draw(Hide base class) Draw Trangle
  • 14. 오버라이딩 예제2 (OVERIDE, ABSTRACT 연산 자) Abstract class Computer public abstract void Network(); public void Graphic() Console.WriteLine(“Graphic OK.”); Class NewComputer : Computer public override void Network() Console.WriteLine(“Network OK.”); Class Override public static void Main() Computer c = new NewComputer(); c.Graphic(); c.Network();
  • 16. 오버라이딩 예제3 (OVERIDE, VIRTUAL 연산 자) class Compute public void Graphic() Console.WriteLine("Graphic OK."); public virtual void Network() Console.WriteLine("base Network OK"); class NewComputer : Computer public override void Network() Console.WriteLine("derived Network OK."); class Program public static void Main(string[] args) Computer c = new Computer(); c.Graphic(); c.Network(); Computer n = new NewComputer(); n.Graphic(); n.Network();
  • 17. 오버라이딩 예제3 결과 Graphic OK. Base Network OK. Graphic OK. Derived Network OK.
  • 18. 상수 선언 Class의 맴버 변수로 선언한다면 .. - Public const float PI = 3.14; >> 무조건 처음에 초기화 해주어야 한다. (컴파일 할 때 값이 결정 된다.) - Public readonly float PI; 생성자() { this.PI = 3.14; } >> 인스턴스가 생성될때 값을 정할 수 있다.
  • 19. IS, AS 연산자 Is 연산자 : T/F 반환 As 연산자 : T일경우 해당하는 클래스 명 반환 사용법 : 문장 is/as 비교할자료형. ex) Interface 포유류 class 고양이과 : 포유류 class 사자 : 포유류, 고양이과 포유류 simba = new 사자(); //simba is/as 고양이과? 고양이과 leo = new 고양이과(); //leo is/as 사자?
  • 20. 상속관계 사자 고양이과포유류
  • 21. 분할 클래스 한 클래스를 여러 번에 나누어서 구현 할 수 있다. Partial class classname { Method1(){} } Partial class classname { Method2(){} }
  • 22. 배열 그리고 컬렉션  배열의 선언 형태는 자바와 비슷하다.  자바와 같이 C#에서도 다양한 배열의 구조적/기능적 인 한계를 보완하는 자료구조를 제공하고 있다. ArrayList, HashTable과 같은 기능을 제공하며 Using System.Collections를 선언해서 사용할 수 있다. - 사용 방법은 C# API 참조
  • 23. 속성(PROPERTY) - Property는 클래스나 데이터의 필드에 접근해서 값을 저장하거나 읽어오는 데 사용하는 요소. - Attribute는 코드를 설명하기 위해 사용되는 요소. Class NameCard private string name; public void setName(string name) public string Name { get{return name;} set{name = value;} } NameCard myCard = new NameCard(); myCard.Name = “최길우”//set Console.WriteLine(myCard.Name);//get
  • 24. 인덱서(INDEXER)  속성 : 맴버필드 접근  인덱서 : 배열에 접근 Private string[] name; Public string this[int i] { get{return name[i];} set{name[i] = value;} } Name[0] = “김제민”; Name[1] = “최길우”; Console.WriteLine(Name[0]); … 속성과 인덱서 : 클래스나 객체의 데이터를 안전하게 읽고 쓸 수 있는 메커니 즘.
  • 25. DELEGATE(델리게이트)  뜻 : 대리자, 즉 다른 method에 대한 참조를 가지고 있다 가 델리게이트를 호출하면 자신이 참조하고 있는 메소드 실행.  함수를 캡슐화 해서 호출, C언어의 함수포인터 개념과 비 슷하며 이벤트나 쓰레드를 통해서 많이 사용한다. Public delegate void PrintOut(String s); //델리게이트 선언 Public static void WriteToConsole(String s) { Console.WriteLine(s); } PrintOut print = new PrintOut(WriteToConsole); print(“PrintOut 호출 >> 다시 WriteToConsole 호출”);
  • 26. 델리게이트 익명 메소드 //선언 Public delegate void PrintOut(String s); //정의 PrintOut print = delegate(string s) { Console.WriteLine(s); } Print(“Anonym-method is very simple, isn’t it?”);
  • 27. 델리게이트의 합성 Public delegate void MyDelegate; MyDelegate A,B,C,D; A=new MyDelegate(SomeMethod); B=new MyDelegate(SomeOther); C=A+B;//A다음에 B실행 D=C-B;//A+B-B 즉 A만 실행
  • 28. 이벤트 C#의 이벤트 처리는 델리게이트에 기반하고 있다. -이유? Event a = 마우스 누르고 손 떼지 않기(mouse pressed) Event b = 마우스 누르고 손 떼기(mouse release) Event c = 마우스 클릭(=a+b) Evend d = c 두번.
  • 29. 이벤트 예제 class Client private int ID; public delegate void ClientService(object sender, EventArgs args); public event ClientService Service; public Client(int ID) //constructor this.ID = ID; public int ClientID //Property get { return this.ID; } Public void FireEvent() if(Service != null) EventArgs args = new EventArgs(); Service(this, args);
  • 30. 이벤트 예제 계속 Class MainApp public static void OnEvent(object sender, Event Args args) Client client = (Client)sender; Console.WriteLine(“고객ID {0} : 경품 당첨”, client.ClientID); public static void Main() Client clientA = new Client(1); clientA.Service += new Client.ClientService(OnEvent); clientA.FireEvent();
  • 31. 이벤트의 처리 경로  Event Sender (Client) FireEvent();  Event Receiver (MainApp)  Event Handler (OnEvent(object sender, Event Args args))
  • 32. ATTRIBUTE(특성), GENERIC(일반화)  코드 안의 요소(메소드, 속성, 필드 등)에 대한 설명 을 담는 객체.  런타임에도 읽을 수 있는 주석. 1. Obsolate 2. Conditional 3. DLL import - 세가지 방법이 있으며 많이 사용하지 않으므로 자 세한 것은 C#서적 참조. - C++, Java에서 제공하는 Templet과 비슷하므로 필 요할때 서적 참조 <class>
  • 33. 파일 조작 Using System.IO FileInfo fileInfo = new FileInfo(@“C:test.txt”); If(fileInfo.Exists) { Console.WriteLine(fileInfo.Directory); … fileInfo.Name, Length.. } 파일조작에 대한 메소드나 속성은 MSDN 참조..
  • 34. FILE I/O - BYTE using System.IO; using System.Text; FileStream fStream = File.OpenWrite(@“C:text.txt”); Byte [] output = new Byte[11] { 72, 101, … }; fStream.Write(output, 0, output.Length); fStream.close(); FileStream fStream = File.OpenRead(@“C:text.txt”); Byte [] input = new Byte[fStream.Length]; fStream.Read(input, 0, input.Length);
  • 35. FILE I/O(STREAM) - READ Using System.IO; Using System.Text; Stream stream = File.OpenRead(@”C:test.txt”); StreamReader sr = new StreamReader(stream, Encoding.Default); String str; Int i = 0; While((str = stream.ReadLine()) != null) { i++; Console.WriteLine(“Line {0}: {1}”, i, str); } Sr.Position = 0; Str = streamReader.ReadLine(); Console.WriteLine(“Line {0} : {1}”, i, str); sr.close();
  • 36. FILE I/O(STREAM) - WRITE Using System.IO; Using System.Text; StreamWriter sw = new StreamWriter(@”C:test.txt”, true, Encoding.Default); sw.WriteLine(“true = 내용 더하기”); sw.close();
  • 37. FILE I/O(STREAM) - BINARY Using system.IO; Using system.Text; Stream stream = File.OpenWrite(@”C:test.txt”); BinaryWriter bw = new BinaryWriter(stream); Bw.Write(1004); Stream.Close(); stream = File.OpenRead(@”C:test.txt”); BinaryReader br = new BinaryReader(stream); Int32 input = binaryReader.ReadInt32(); Console.WriteLine(input); Stream.Close();
  • 38. DB CONNECT String strCnn; MySqlConnection oCnn = null; Try strCnn = "data source=localhost;database=test; user id=root;password=root"; oCnn = new MySqlConnection(strCnn); oCnn.Open(); catch (MySqlException _e) Console.WriteLine(_e.Message); String squery = “select * from test;”; … Insert into test values( …)
  • 39. DB CONNECT & HANDLE. 앞의 예제보다 최근에 코딩할 때는 Helper를 쓰는 경 향이 많다. 코드 수가 적고 편하기 때문에 .. string strCnn = "data source=localhost;database=test; user id=root;password=root"; string query = "insert into test values(23, "Chris");"; DataSet ds = MySqlHelper.ExecuteDataset(strCnn, query); …
  • 40. Q&A