using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace HelloCSharp
{
class Program
{

static void Main(string[] args)
{
//args에서 스트링 배열을 받아서 입력받는다.
Console.writeLine("hello csharp");
//Console.writeLine(args.Length);
Console.WriteLine("hello"+args[0] );

Console.Readkey();
}
}


}


클래스는 붕어빵을 예로 든다면 붕어빵 틀같은것이다


클래스로 붕어빵클래스를 정의하며 붕어빵에는 밀가루와 우유 팥등의 특징이있고

클래스를 설정한상태에서 붕어빵틀이 완성되고 붕어빵을 붕어빵틀에서 찍어낸다면 

붕어빵들은 계속생기는데 이렇게 생기는것을 인스턴스라고 하며 

붕어빵 클래스를 설계한후에 인스턴스가 계속 찍어낼수있는것이다.


그럼 이런경우 클래스 설계후 인스턴스는 다른 스크립트에서 호출이 가능하다


그래서 이런 객체들 오브젝트들 인스턴스와 같은것이며 설계나 전체를 바꿀때 클래스를 변경하면 전체 인스턴스를 바꿀수 있다. 

함수를 function 이라고 하는데 C#같은 경우는 메소드라고 불리며 

메소드란? 클래스에 속한 함수이다


C++에서는 멤버펑션이라고 한다

예를들어 int nongsim ( int ramen , int water) 

{ }

라고 하면 nongsim 은 함수의 프로토타입이라고 할수있으며 return 으로 값이 반환도 된다

return행도 프로토명에 들어감



계산하는 함수를 만든다고 했을때 

int add( int number1 , int number2 )

{

int sum = number1 +number2;

label.text =sum.ToString();

}

float add( float number1 , float number2 )

{

float sum = number1 +number2;

label.text =sum.ToString();

}


이렇게 실수를 더하는 함수 정수를 더하는 함수로 정의가 가능한데

함수는 매개변수가 다르면 여러개 만들수 있는데 매개변수의 타입이 다르거나 매개변수의 데이터 가 다르면 여러개를 만들수있고 이러한 형태를


같은 이름의 함수가 다른 매개변수를 가지고 여러개 정의되는 것을 오버로딩 (overloading)이라고 한다

 

객체지향이란 프로시저 프로그래밍에서 파생되었고

이 프로시저프로그래밍의 복잡성이나 단점을 보완하기위해 나왔으며

특징은 캡슐,상속,다형성 등이있다


객체라는 그룹에 함수가 집합으로 있는것과 같다


object programming 


procedeurl programming 

'언어 > C#' 카테고리의 다른 글

객체와 클래스  (0) 2018.12.14
C# 메소드,오버로딩  (0) 2018.12.10
C# 해외 면접시 TOP50  (0) 2018.12.10
주인공을 따라다니는 카메라 만들기 following camera  (0) 2018.12.10
TouchPad.cs  (0) 2018.12.10

가장 인기있는 C # 인터뷰 질문 및 답변

기본 개념에 대한 질문

Q # 1) 객체와 클래스 란 무엇입니까?

Ans :  클래스는 실시간 엔터티를 나타내는 데 사용되는 속성 및 메서드의 캡슐화입니다. 모든 인스턴스를 단일 단위로 결합하는 데이터 구조입니다.

클래스의 인스턴스에있는 객체입니다. 기술적으로 이것은 변수, 배열 또는 컬렉션 형태로 저장 될 수있는 할당 된 메모리 블록 일뿐입니다.

Q # 2) 기본적인 OOP 개념은 무엇입니까?

Ans : 객체 지향 프로그래밍의 네 가지 기본 개념은 다음과 같습니다.

  • 캡슐화 - 개체의 내부 표현은 개체 정의 외부의보기에서 숨겨집니다. 필요한 정보 만 액세스 할 수 있지만 나머지 데이터 구현은 숨겨져 있습니다.
  • 추상화 (Abstraction) - 이것은 객체의 중요 동작 및 데이터를 식별하고 관련없는 세부 사항을 제거하는 프로세스입니다.
  • 상속 - 다른 클래스에서 새 클래스를 만드는 기능입니다. 부모 클래스에있는 객체의 동작을 액세스, 수정 및 확장하여 수행됩니다.
  • 다형성 (Polymorphism) - 이름은 하나의 이름, 많은 형태를 의미합니다. 같은 이름이지만 구현이 다른 여러 메소드를 사용하면됩니다.

Q # 3) Managed 및 Unmanaged 코드 란 무엇입니까?

Ans : 관리 코드 는 CLR (Common Language Runtime), 즉 .Net Platform을 기반으로하는 모든 응용 프로그램 코드에 의해 실행되는 코드입니다. 사용되지 않는 메모리를 정리하기 위해 내부적으로 가비지 수집기를 사용하는 .Net 프레임 워크 때문에 관리되는 것으로 간주됩니다.

비 관리 코드 는 .Net을 제외한 다른 프레임 워크의 응용 프로그램 런타임에서 실행되는 코드입니다. 응용 프로그램 런타임은 메모리, 보안 및 기타 성능 작업을 처리합니다.

Q # 4) 인터페이스 란 무엇입니까?

Ans : 인터페이스 는 구현이없는 클래스입니다. 여기에는 메서드, 속성 및 이벤트의 선언 만 포함됩니다.

Q # 5) C #의 여러 클래스 유형은 무엇입니까?

Ans : C #의 여러 유형의 클래스는 다음과 같습니다.

  • 부분 클래스 - 멤버를 여러 개의 .cs 파일로 나누거나 공유 할 수 있습니다. Partial 키워드로 표시됩니다 .
  • 봉인 된 클래스 - 상속받을 수없는 클래스입니다. 봉인 된 클래스의 멤버에 액세스하려면 클래스의 객체를 만들어야합니다. 이 키워드는 Sealed 라는 키워드로 표시됩니다.
  • 추상 클래스 - 객체를 인스턴스화 할 수없는 클래스입니다. 클래스는 상속 될 수 있습니다. 적어도 하나의 메소드를 포함해야합니다. 그것은 abstract 키워드로 표시됩니다 .
  • 정적 클래스 - 상속을 허용하지 않는 클래스입니다. 클래스 멤버도 정적입니다. 정적 인 키워드로 표시됩니다이 키워드는 정적 클래스의 우연한 인스턴스를 검사하도록 컴파일러에 지시합니다.

Q # 6) C #에서 코드 컴파일을 설명하십시오.

Ans : 코드 컴파일에는 다음과 같은 네 단계가 있습니다.

  • C # 컴파일러로 소스 코드를 Managed 코드로 컴파일하기.
  • 새로 생성 된 코드를 어셈블리로 결합합니다.
  • 공용 언어 런타임 (CLR)로드
  • CLR로 어셈블리를 실행합니다.

Q # 7)  클래스와 구조체의 차이점은 무엇입니까?

Ans : Class와 Struct 사이의 차이점은 다음과 같습니다.

수업구조
상속 지원상속을 지원하지 않습니다.
클래스는 참조로 전달됩니다 (참조 유형).Struct by Copy (값 유형)
회원은 기본적으로 비공개입니다.회원은 기본적으로 공개됩니다.
더 큰 복잡한 객체에 적합소형 격리 모델에 적합
메모리 관리를 위해 쓰레기 수거통을 사용할 수 있습니다.가비지 수집기를 사용할 수 없으므로 메모리 관리가 필요하지 않습니다.

Q # 8) 가상 메소드와 추상 메소드의 차이점은 무엇입니까?

ANS :  가상 메소드는 항상 기본 구현을해야합니다. 그러나 필수는 아니지만 파생 클래스에서 재정의 될 수 있습니다. override키워드를 사용하여 재정의 할 수 있습니다 .

추상 방법은 구현이 없습니다. 추상 클래스에 있습니다. 파생 클래스가 추상 메서드를 구현하는 것이 필수입니다. 재정 이 사용될 수 있지만 키워드는 여기에 필요하지 않습니다.

Q # 9) C #에서 네임 스페이스를 설명하십시오.

답변 :  대규모 코드 프로젝트를 구성하는 데 사용됩니다. "시스템"은 C #에서 가장 널리 사용되는 네임 스페이스입니다. 우리는 우리 자신의 네임 스페이스를 만들고 하나의 네임 스페이스를 다른 네임 스페이스, 즉 중첩 네임 스페이스 (Nested Namespaces)라고 사용할 수 있습니다.

키워드는 "네임 스페이스"로 표시됩니다.

Q # 10) C #에서 "using"문은 무엇입니까?

Ans : "키워드 사용"은 특정 네임 스페이스가 프로그램에서 사용되고 있음을 나타냅니다.

예를 들어, 시스템을 사용하십시오 . 여기서 System 은 네임 스페이스입니다. 콘솔 클래스는 시스템 아래에 정의됩니다. 따라서 우리 프로그램에서 console.writeline ( "....") 또는 readline을 사용할 수 있습니다.

Q # 11) 추상화를 설명하십시오.

Ans : 추상화 는 OOP 개념 중 하나입니다. 클래스의 필수 기능 만 표시하고 불필요한 정보는 숨 깁니다.

자동차 예를 들어 보겠습니다.

자동차의 운전자는 색상, 이름, 거울, 조향 장치, 기어, 브레이크 등과 같은 자동차의 세부 사항을 알아야합니다. 내부 엔진, 배기 시스템은 무엇인지 알 필요가 없습니다.

따라서 추상화는 필요한 것을 파악하고 외부 세계에서 내부 세부 정보를 숨기는 데 도움이됩니다. private 키워드를 사용 하여Private와 같은 매개 변수를 선언하면 내부 정보를 숨길 수 있습니다 .

Q # 12) 다형성을 설명 하시겠습니까?

Ans : 프로그래밍 방식으로 다형성 이란 동일한 방법이지만 구현이 다르다는 것을 의미합니다.

컴파일 시간과 런타임의 두 가지 유형입니다.

컴파일 시간 다형성 은 연산자 오버로딩에 의해 달성됩니다.

런타임 다형성 은 오버라이드 (override)에 의해 달성된다. 상속 및 가상 함수는 런타임 다형성 중에 사용됩니다.

예를 들어 , 클래스에 Void Add () 메소드가있는 경우, 다형성은 메소드 오버로드, 즉 void Add (int a, int b), void Add (int add)는 모두 오버로드 된 메소드입니다.

Q # 13) C #에서는 예외 처리가 어떻게 구현됩니까?

Ans : 예외 처리는 C #의 네 가지 키워드를 사용하여 수행됩니다.

  • try - 예외가 검사 될 코드 블록을 포함합니다.
  • catch - 예외 핸들러를 사용하여 예외를 catch하는 프로그램입니다.
  • finally - 예외가 catch되었는지 여부에 관계없이 실행되도록 작성된 코드 블록입니다.
  • Throw - 문제가 발생하면 예외를 throw합니다.

Q # 14) C # I / O 클래스 란 무엇입니까? 일반적으로 사용되는 I / O 클래스는 무엇입니까?

Ans :  C #에는 생성, 삭제, 열기, 닫기 등과 같은 파일에 대한 다양한 작업을 수행하는 데 사용되는 클래스로 구성된 System.IO 네임 스페이스가 있습니다.

일반적으로 사용되는 I / O 클래스는 다음과 같습니다.

  • 파일 - 파일 을 조작하는 데 도움이됩니다.
  • StreamWriter - 스트림에 문자를 쓰는 데 사용됩니다.
  • StreamReader - 문자를 스트림으로 읽는 데 사용됩니다.
  • StringWriter - 문자열 버퍼를 읽는 데 사용됩니다.
  • StringReader - 문자열 버퍼를 쓰는 데 사용됩니다.
  • 경로 - 경로 정보와 관련된 작업을 수행하는 데 사용됩니다.

Q # 15)  StreamReader / StreamWriter 클래스 란 무엇입니까?

Ans : StreamReader 및 StreamWriter 는 네임 스페이스 System.IO의 클래스입니다. characters90, Reader 기반 데이터를 각각 읽고 쓰고 싶을 때 사용됩니다.

StreamReader의 멤버 중 일부는 Close (), Read (), Readline ()입니다.

StreamWriter의 멤버는 Close (), Write (), Writeline ()입니다.

1Class Program1
2{
3using(StreamReader sr = new StreamReader(“C:\ReadMe.txt”)
4{
5//----------------code to read-------------------//
6}
7using(StreamWriter sw = new StreamWriter(“C:\ReadMe.txt”))
8{
9//-------------code to write-------------------//
10}
11}

Q # 16) C #의 소멸자 란 무엇입니까?

ANS :  소멸자는 메모리를 정리하고 자원을 확보하는 데 사용됩니다. 그러나 C #에서는 가비지 컬렉터가 자체적으로 수행합니다. 정리를 위해 System.GC.Collect ()가 내부적으로 호출됩니다. 그러나 때로는 소멸자를 수동으로 구현해야 할 수도 있습니다.

예 :

~ 자동차 ()
{
Console.writeline ( "....");
}

Q # 17) 추상 클래스 란 무엇입니까?

ANS : 추상 클래스는 추상적 인 키워드로 표시되며, 기본 클래스로만 사용할 수있는 클래스입니다. 추상 클래스는 항상 상속되어야합니다. 클래스 자체의 인스턴스는 만들 수 없습니다. 어떤 프로그램이 어떤 클래스의 객체를 생성하기를 원하지 않는다면, 그러한 클래스는 추상화 될 수 있습니다.

추상 클래스의 모든 메소드는 동일한 클래스에 구현되지 않습니다. 그러나 그들은 어린이 수업에 구현되어야합니다.

예 :

1abstract class AB1
2{
3Public void Add();
4}
5Class childClass : AB1
6{
7childClass cs = new childClass ();
8int Sum = cs.Add();
9}

추상 클래스의 모든 메소드는 암시 적으로 가상 메소드입니다. 따라서 가상 키워드는 추상 클래스의 어떤 메소드와도 함께 사용되어서는 안됩니다.

Q # 18) 복싱과 언 박싱은 무엇입니까?

Ans : 값 유형을 참조 유형으로 변환하는 것을 Boxing 이라고 합니다.

예 :

int Value1 - = 10;

//----권투------//

개체 boxedValue = Value1;

같은 참조 유형 (boxing에 의해 생성 된)을 값 유형으로 다시 명시 적으로 변환하는 것을 Unboxing 이라고 합니다.

예 :

// ---- UnBoxing ------ //

int UnBoxing = int (boxedValue);

Q # 19) 계속과 휴식 진술의 차이점은 무엇입니까?

Ans : Break 문은 루프를 중단합니다. 그것은 프로그램을 제어하여 루프를 종료합니다. Continue 문 은 현재 반복 만 종료하도록 프로그램을 제어합니다. 루프를 깨지는 않습니다.

Q # 20) 최종 블록과 최종 블록의 차이점은 무엇입니까?

Ans : finally 블록 은 try와 catch 블록을 실행 한 후에 호출됩니다. 예외 처리에 사용됩니다. 예외가 포착되었는지 여부에 관계없이이 코드 블록이 실행됩니다. 일반적으로이 블록에는 정리 코드가 있습니다.

finalize 메서드는 가비지 수집 직전에 호출됩니다. 비 관리 코드의 정리 작업을 수행하는 데 사용됩니다. 지정된 인스턴스가 연속적으로 호출되지 않을 때 자동으로 호출됩니다.

배열과 문자열에 관한 질문

Q # 21) 배열이란 무엇입니까? 단일 및 다차원 배열에 대한 구문을 제공 하시겠습니까?

Ans :  배열 은 동일한 유형의 여러 변수를 저장하는 데 사용됩니다. 이것은 연속적인 메모리 위치에 저장된 변수의 집합입니다.

예 :

이중 숫자 = 새 이중 [10];

int [] score = 새로운 int [4] {25,24,23,25};

단일 차원 배열은 변수가 단일 행에 저장되는 선형 배열입니다. 위의  는 단일 차원 배열입니다.

배열에는 둘 이상의 차원이있을 수 있습니다. 다차원 배열은 직사각형 배열이라고도합니다.

예를 들어 , int [,] numbers = new int [3,2] {{1,2}, {2,3}, {3,4}};

Q # 22) Jagged Array 란 무엇입니까?

Ans : 가변 배열은 요소가 배열 인 배열입니다. 배열의 배열이라고도합니다. 단일 또는 다중 차원 일 수 있습니다.

int [] jaggedArray = 새로운 int [4] [];

Q # 23) Array의 일부 속성 이름을 지정합니다.

Ans : 배열의 속성은 다음과 같습니다.

  • Length - 배열의 총 요소 수를 가져옵니다.
  • IsFixedSize - 배열의 크기가 고정되어 있는지 여부를 알려줍니다.
  • IsReadOnly - 배열이 읽기 전용인지 여부를 확인합니다.

Q # 24) Array 클래스 란 무엇입니까?

ANS : Array 클래스는 모든 배열의 기본 클래스입니다. 그것은 많은 특성과 방법을 제공합니다. 시스템 네임 스페이스에 있습니다.

Q # 25) 문자열이란 무엇입니까? String 클래스의 속성은 무엇입니까?

ANS :  문자열은 문자 개체의 컬렉션입니다. C #에서 문자열 변수를 선언 할 수도 있습니다.

문자열 이름 = "C # 질문";

C #의 문자열 클래스는 문자열을 나타냅니다.

String 클래스의 속성은 Chars 및 Length입니다. 
Chars 는 현재 String에서 Char 객체를 가져옵니다. 
Length 는 현재 String의 객체 수를 가져옵니다.

Q # 26) 이스케이프 시퀀스 란 무엇입니까? C #에서 일부 문자열 이스케이프 시퀀스의 이름을 지정합니다.

ANS : 이스케이프 시퀀스는 백 슬래시 (\)로 표시된다. 역 슬래시는 뒤 따르는 문자가 문자 그대로 해석되어야하거나 특수 문자임을 나타냅니다. 이스케이프 시퀀스는 단일 문자로 간주됩니다.

문자열 이스케이프 시퀀스는 다음과 같습니다.

\ n - 개행 문자 
\ b - 백 스페이스 
\\ - 백 슬래시 
\ '- 작은 따옴표 
\' '- 큰 따옴표

Q # 27) 정규식이란 무엇입니까? 정규식을 사용하여 문자열을 검색 하시겠습니까?

Ans : 정규 표현식 은 일련의 입력과 일치하는 템플릿입니다. 패턴은 연산자, 구문 또는 문자 리터럴로 구성 될 수 있습니다. 정규 표현식은 문자열 파싱 및 문자열 교체를 위해 사용됩니다.

예 :

*는 앞의 문자를 0 번 이상 찾습니다. 따라서 a * b 정규 표현식은 b, ab, aab, aaab 등과 동일합니다.

정규식을 사용하여 문자열 검색

1static void Main(string[] args)
2{
3string[] languages = { "C#""Python""Java" };
4foreach(string in languages)
5{
6if(System.Text.RegularExpressions.Regex.IsMatch(s,"Python"))
7{
8Console.WriteLine("Match found");
9}
10}
11}

위의 예제는 languages ​​배열의 입력 집합에 대해 "Python"을 검색합니다. 패턴이 입력에서 발견되면 true를 반환하는 Regex.IsMatch를 사용합니다. 패턴은 우리가 일치시키고 자하는 입력을 나타내는 모든 정규식 일 수 있습니다.

Q # 28) 기본적인 String Operations 란 무엇입니까? 설명.

Ans :  기본 문자열 작업 중 일부는 다음과 같습니다.

  • Concatenate - 두 개의 문자열을 System.String.Concat을 사용하거나 + 연산자를 사용하여 연결할 수 있습니다.
  • 수정 - 바꾸기 (a, b)는 문자열을 다른 문자열로 바꾸는 데 사용됩니다. Trim ()은 끝이나 처음에 문자열을 다듬는 데 사용됩니다.
  • Compare - System.StringComparison ()은 대소 문자를 구분하거나 비교하지 않을 두 문자열을 비교하는 데 사용됩니다. 주로 원래 문자열과 비교할 두 개의 매개 변수를 사용합니다.
  • 검색 - StartWith, EndsWith 메서드는 특정 문자열을 검색하는 데 사용됩니다.

Q # 29) 파싱이란 무엇입니까? 날짜 시간 문자열을 구문 분석하는 방법?

Ans :  구문 분석 은 문자열을 다른 데이터 형식으로 변환하는 것입니다.

예 :

문자열 텍스트 = "500";

int num = int.Parse (text);

500은 정수입니다. 따라서 Parse 메서드는 문자열 500을 자체 기본 유형, 즉 int로 변환합니다.

같은 방법으로 DateTime 문자열을 변환하십시오. 
string dateTime = "2018 년 1 월 1 일"; 
DateTime parsedValue = DateTime.Parse (dateTime);

고급 개념

Q # 30) 대의원은 무엇입니까? 설명.

ANS :  대리자 방법에 관한 기준을 유지하는 변수이다. 따라서 참조 유형의 함수 포인터입니다. 모든 대리인은 System.Delegate 네임 스페이스에서 파생됩니다. 대의원과 그것이 대표하는 방법 모두 동일한 서명을 가질 수 있습니다.

대리자 선언 : public delegate void AddNumbers (int n);

대리자를 선언 한 후에는 new 키워드를 사용하여 대리인을 만들어야합니다.

AddNumbers an1 = 새로운 AddNumbers (숫자);

델리게이트는 델리게이트가 호출 될 때 내부적으로 호출되는 참조 메소드에 일종의 캡슐화를 제공합니다.

1public delegate int myDel(int number);
2public class Program
3{
4public int AddNumbers(int a)
5{
6int Sum = a + 10;
7return Sum;
8}
9public void Start()
10{
11myDel DelgateExample = AddNumbers;
12}
13}

위의 예제에서 정수 값을 매개 변수로 사용하는 대리자 myDel이 있습니다. 클래스 프로그램에는 AddNumbers ()라는 위임자와 동일한 서명의 메서드가 있습니다.

대리자의 개체를 만드는 Start ()라는 다른 메서드가있는 경우 대리자의 서명과 동일한 서명을 가지므로 AddNumbers에 개체를 할당 할 수 있습니다.

Q # 31) 이벤트 란 무엇입니까?

Ans : 이벤트 는 응답해야하는 응용 프로그램에 대한 알림을 생성하는 사용자 작업입니다. 사용자 동작은 마우스 움직임, 키 누르기 등이 될 수 있습니다.

프로그래밍 방식으로 이벤트를 발생시키는 클래스를 게시자라고하며 이벤트를 응답 / 수신하는 클래스를 구독자라고합니다. 이벤트에는 이벤트가 발생하지 않는 다른 가입자가 적어도 하나 있어야합니다.

대리인은 이벤트를 선언하는 데 사용됩니다.

Public 대리자 void PrintNumbers ();

이벤트 PrintNumbers myEvent;

Q # 32) 행사와 함께 대의원을 사용하는 방법?

Ans : 대리인은 이벤트를 발생시키고 처리하는 데 사용됩니다. 항상 대리자를 먼저 선언하고 이벤트를 선언해야합니다.

예를 보자.

환자라는 클래스를 생각해보십시오. 환자 클래스의 환자의 사망 정보를 요구하는 보험, 은행 및 기타 두 가지 클래스를 고려하십시오. 여기서 Insurance와 Bank는 가입자이고 Patient 클래스는 게시자가됩니다. 이 이벤트는 사망 이벤트를 트리거하고 다른 두 클래스는 이벤트를 수신해야합니다.

1namespace ConsoleApp2
2{
3public class Patient
4{
5public delegate void deathInfo();//Declaring a Delegate//
6public event deathInfo deathDate;//Declaring the event//
7public void Death()
8{
9deathDate();
10}
11}
12public class Insurance
13{
14Patient myPat = new Patient();
15void GetDeathDetails()
16{
17//-------Do Something with the deathDate event------------//
18}
19void Main()
20{
21//--------Subscribe the function GetDeathDetails----------//
22myPat.deathDate += GetDeathDetails;
23}
24}
25public class Bank
26{
27Patient myPat = new Patient();
28void GetPatInfo ()
29{
30//-------Do Something with the deathDate event------------//
31}
32void Main()
33{
34//--------Subscribe the function GetPatInfo ----------//
35myPat.deathDate += GetPatInfo;
36}
37}
38}

Q # 33)  대의원의 종류는 무엇입니까?

Ans : 대표단의 종류는 다음과 같습니다.

단일 대리인 - 단일 메서드를 호출 할 수있는 대리자입니다.

Multicast Delegate - 여러 메서드를 호출 할 수있는 대리자입니다. + 및 - 연산자는 각각 가입 및 가입 취소에 사용됩니다.

일반 위임 - 위임의 인스턴스를 정의 할 필요가 없습니다. Action, Funcs 및 Predicate의 세 가지 유형이 있습니다.

  • 액션 위의 델리게이트 및 이벤트 예제에서 Action 키워드를 사용하여 델리게이트 및 이벤트의 정의를 바꿀 수 있습니다. Action 대리자는 인수에서 호출 할 수 있지만 결과를 반환하지 않는 메서드를 정의합니다.

Public delegate void deathInfo ();

공개 이벤트 deathInfo deathDate;

// 액션으로 대체 //

공개 이벤트 액션 deathDate;

동작은 암시 적으로 대리자를 나타냅니다.

  • Func - Func 대리자는 인수에서 호출 할 수있는 메서드를 정의하고 결과를 반환합니다.

Func <int, string, bool> myDel 은 델리게이트 bool myDel (int a, string b)과 동일합니다.

  •  Predicate - 인수에 대해 호출 할 수있는 메소드를 정의하고 항상 bool을 리턴합니다.

술어 <string> myDel 은 대리자 bool myDel (string s) 과 동일합니다 .

Q # 34)  멀티 캐스트 대표는 무엇을 의미합니까?

Ans :  하나 이상의 메소드를 가리키는 Delegate를 Multicast Delegate라고합니다. 멀티 캐스팅은 + 및 + = 연산자를 사용하여 수행됩니다.

32 번 질문의 예를 생각해보십시오.

deathEvent, GetPatInfo 및 GetDeathDetails에 대한 구독자가 두 명 있습니다 그래서 우리는 + = 연산자를 사용했습니다. 즉, myDel 이 호출 될 때마다 두 가입자가 호출됩니다. 위임자는 추가 된 순서대로 호출됩니다.

Q # 35) 이벤트에 게시자와 가입자를 설명하십시오.

Ans : 게시자 는 다른 유형의 다른 유형의 메시지를 게시하는 책임을 맡고있는 클래스입니다. 위의 질문에서 논의 된 바와 같이 메시지는 이벤트입니다.

질문 32 의  에서 클래스 환자는 게시자 클래스입니다. 그것은 다른 클래스가받는 이벤트 deathEvent를 생성합니다 .

구독자 는 관심있는 유형의 메시지를 캡처합니다. 다시, 질문 32 의  에서 클래스 보험 및 은행은 가입자입니다. 그들은 void유형의 이벤트 deathEvent 에 관심이있다 .

Q # 36) 동기 및 비동기 작업이란 무엇입니까?

답변 : 동기화는 주어진 시간에 하나의 스레드 만 리소스에 액세스 할 수있는 스레드 안전 코드를 만드는 방법입니다.

비동기 호출은 프로그램 플로우를 계속하기 전에 메소드가 완료되기를 기다립니다. 동기 프로그래밍은 하나의 스레드 만 사용되므로 사용자가 시간 소모적 인 작업을 수행하려고 할 때 UI 작업에 심각한 영향을 미칩니다.

비동기 작업에서는 메서드 호출이 즉시 반환되므로 호출 된 메서드가 특정 상황에서 작업을 완료하는 동안 프로그램에서 다른 작업을 수행 할 수 있습니다.

C #에서는 Async 및 Await 키워드가 비동기 프로그래밍을 수행하는 데 사용됩니다. 동기 프로그래밍에 대한 자세한 내용 은 질문 43 을 참조하십시오.

Q # 37) C #의 리플렉션은 무엇입니까?

Ans : Reflection은 런타임 중에 어셈블리의 메타 데이터에 액세스하는 코드의 기능입니다. 프로그램 자체를 반영하고 메타 데이터를 사용하여 사용자에게 알리거나 프로그램의 동작을 수정합니다. 메타 데이터는 객체, 메소드에 대한 정보를 참조합니다.

System.Reflection 네임 스페이스에는로드 된 모든 형식 및 메서드의 정보를 관리하는 메서드와 클래스가 포함되어 있습니다.  를 들어 윈도우 애플리케이션에서 버튼의 속성을보기 위해 주로 사용됩니다 .

클래스 리플렉션의 MemberInfo 객체는 클래스와 관련된 속성을 검색하는 데 사용됩니다.

리플렉션은 두 단계로 구현됩니다. 먼저 객체의 유형을 얻은 다음 유형을 사용하여 메소드 및 속성과 같은 멤버를 식별합니다.

클래스의 유형을 얻으려면

유형 mytype = myClass.GetType ();

클래스의 유형이 있으면 클래스의 다른 정보에 쉽게 액세스 할 수 있습니다.

System.Reflection.MemberInfo 정보 = mytype.GetMethod ( "AddNumbers");

위의 명령문 은 myClass 클래스에 AddNumbers 라는 이름의 메소드를 찾으려고 시도합니다 .

Q # 38) 일반 수업이란 무엇입니까?

Ans : Generics 또는 Generic 클래스는 특정 데이터 형식이없는 클래스 나 개체를 만드는 데 사용됩니다. 데이터 유형은 런타임 중에, 즉 프로그램에서 사용될 때 할당 할 수 있습니다.

예 :

일반 수업

위의 코드에서 문자열과 int를 비교하기 위해 처음에는 2 개의 비교 메서드를 사용합니다.

다른 데이터 유형 매개 변수 비교의 경우 많은 오버로드 된 메소드를 작성하는 대신 일반 클래스를 작성하여 대체 데이터 유형 (예 : T)을 전달할 수 있습니다. 따라서 T는 Main () 메소드에서 특별히 사용될 때까지 데이터 유형으로 작동합니다 .

Q # 39) 설명 접근 자 속성 가져 오기 및 설정하기?

Ans : Get 및 Set 은 접근 자라 불립니다. 이것들은 Properties에 의해 사용됩니다. 속성은 개인 필드 값을 읽고 쓰는 메커니즘을 제공합니다. 이 private 필드에 액세스하기 위해 이러한 접근자가 사용됩니다.

Get 속성은 속성 값을 반환하는 데 사용됩니다. 
Set 속성 접근자는 값을 설정하는 데 사용됩니다.

get과 set의 사용법은 다음과 같습니다.

접근 자 속성 가져 오기 및 설정

Q # 40) 쓰레드 란 무엇입니까? 멀티 스레딩이란 무엇입니까?

Ans :  A Thread 는 실행될 수있는 명령어의 집합으로, 우리 프로그램이 동시 처리를 수행 할 수있게합니다. 동시 처리는 한 번에 두 가지 이상의 작업을 수행하는 데 도움이됩니다. 기본적으로 C #에는 스레드가 하나만 있습니다. 그러나 원래 스레드와 병렬로 코드를 실행하기 위해 다른 스레드를 작성할 수 있습니다.

스레드는 수명주기가 있습니다. 스레드 클래스가 생성되고 실행 후에 종료 될 때마다 시작됩니다. System.Threading 은 스레드를 만들고 멤버를 사용하기 위해 포함되어야하는 네임 스페이스입니다.

스레드는 스레드 클래스를 확장하여 작성됩니다. Start () 메서드는 스레드 실행을 시작하는 데 사용됩니다.

// CallThread는 대상 메서드입니다. //
 ThreadStart methodThread = 새로운 ThreadStart (CallThread);
 스레드 childThread = 새 스레드 (methodThread);
 childThread.Start ();

C #은 한 번에 둘 이상의 작업을 실행할 수 있습니다. 이것은 다른 스레드로 다른 프로세스를 처리하여 수행됩니다. 이것을 MultiThreading이라고합니다.

다중 스레드 작업을 처리하는 데 사용되는 여러 가지 스레드 메소드가 있습니다.

시작, 수면, 중단, 일시 중지, 다시 시작 및 가입.

이 방법의 대부분은 자명하다.

Q # 41) 스레드 클래스의 일부 속성 이름을 지정하십시오.

Ans : 스레드 클래스의 몇 가지 속성은 다음과 같습니다.

  • IsAlive - 스레드가 활성 일 때 값 True를 포함합니다.
  • 이름 - 스레드의 이름을 반환 할 수 있습니다. 또한 스레드의 이름을 설정할 수 있습니다.
  • 우선 순위 - 운영 체제가 설정 한 작업의 우선 순위 값을 반환합니다.
  • IsBackground - 스레드가 백그라운드 프로세스인지 포어 그라운드인지 여부를 나타내는 값을 가져 오거나 설정합니다.
  • ThreadState - 스레드 상태를 설명합니다.

Q # 42)  스레드의 다른 상태는 무엇입니까?

스레드의 상태는 다음과 같습니다.

  • Unstarted - 스레드가 생성되었습니다.
  • Running - 스레드가 실행을 시작합니다.
  • WaitSleepJoin - 스레드는 절전 모드를 호출하고, 다른 개체에서 대기하고 다른 스레드에서 호출을 호출합니다.
  • Suspended - 스레드가 일시 중단되었습니다.
  • 중단됨 - 스레드가 종료되었지만 중지 된 상태로 변경되지 않았습니다.
  • 중지됨 - 스레드가 중지되었습니다.

Q # 43)  비동기 및 대기는 무엇입니까?

Ans :  Async 및 Await 키워드는 C에서 비동기 메서드를 만드는 데 사용됩니다.

비동기 프로그래밍은 프로세스가 주 프로세스 또는 다른 프로세스와 독립적으로 실행됨을 의미합니다.

Async 및 Await의 사용법은 다음과 같습니다.

비동기 키워드

  • Async 키워드는 메서드 선언에 사용됩니다.
  • 계산은 CalculateCount () 메소드를 호출하는 int 유형의 태스크입니다.
  • Calculatecount ()는 실행을 시작하고 무언가를 계산합니다.
  • 독립적 인 작업이 내 스레드에서 수행 된 후 계산서에 도달했습니다.
  • Calculatecount가 완료되지 않으면 myMethod가 호출 메소드로 돌아가므로 기본 스레드가 차단되지 않습니다.
  • Calculatecount가 이미 끝나면 컨트롤이 대기 수에 도달하면 결과를 사용할 수 있습니다. 따라서 다음 단계는 동일한 스레드에서 계속됩니다. 그러나 1 초의 지연이 관련된 위의 경우에는 상황이 아닙니다.

Q # 44) 교착 상태 란 무엇입니까?

ANS :  교착 상태가 서로 끝날 때까지 두 개 이상의 프로세스가 기다리고 있기 때문에 프로세스가 실행을 완료 할 수없는 상황이다. 이것은 일반적으로 멀티 스레딩에서 발생합니다.

공유 리소스가 프로세스에 의해 보류되고 다른 프로세스가 첫 번째 프로세스가 공유 리소스를 해제하기를 기다리고 있고 잠긴 항목을 포함하는 스레드가 다른 프로세스가 완료되기를 기다리고 있습니다.

아래 예제를 고려하십시오.

이중 자물쇠

이중 자물쇠

  • 작업 수행은 objB에 액세스하고 1 초 동안 대기합니다.
  • 한편 PerformtaskB는 ObjA에 액세스하려고 시도합니다.
  • 1 초 후, PeformtaskA는 PerformtaskB에 의해 잠긴 ObjA에 액세스하려고 시도합니다.
  • PerformtaskB는 PerformtaskA에 의해 잠긴 ObjB에 액세스하려고 시도합니다.

이렇게하면 교착 상태가 발생합니다.

Q # 45) L의 설명 옥토퍼스 , 모니터 및 뮤텍스 스레딩에서 개체.

Ans : Lock 키워드는 한 번에 하나의 스레드 만 코드의 특정 섹션에 들어갈 수 있도록합니다. 위의  에서 lock (ObjA)은이 프로세스가이를 해제 할 때까지 잠금이 ObjA에 놓여 있음을 의미합니다. 다른 스레드는 ObjA에 액세스 할 수 없습니다.

뮤텍스는 또한 잠금을 좋아되지만 한 번에 여러 프로세스에서 작동 할 수 있습니다. WaitOne ()은 잠금에 사용되고 ReleaseMutex ()는 잠금을 해제하는 데 사용됩니다. 그러나 Mutex는 그것을 획득하고 해제하는 데 시간이 걸리므로 잠금보다 느립니다.

Monitor.Enter 및 Monitor.Exit은 내부적으로 잠금을 구현합니다. 자물쇠는 M onitors 의 지름길입니다 lock (objA) 내부적으로 호출합니다.

Monitor.Enter (ObjA);
시험
{
}
마지막으로 {Monitor.Exit (ObjA));}

Q # 46) 인종 조건이란 무엇입니까?

 A 레이스 조건 은 두 스레드가 동일한 자원에 액세스하여 동시에 변경하려고 할 때 발생합니다. 리소스에 처음 액세스 할 수있는 스레드는 예측할 수 없습니다.

우리가 T1과 T2라는 두 개의 스레드를 가지고 있고 X라는 공유 자원에 액세스하려고 시도하고 있고 두 스레드가 모두 값을 X에 쓰려고하면 X에 쓰여진 마지막 값이 저장됩니다.

Q # 47)  스레드 풀링이란 무엇입니까?

ANS :  스레드 풀 스레드의 모음입니다. 이러한 스레드는 기본 스레드를 방해하지 않고 작업을 수행하는 데 사용될 수 있습니다. 스레드가 작업을 완료하면 스레드는 풀로 돌아갑니다.

System.Threading.ThreadPool 네임 스페이스에는 풀의 스레드와 해당 작업을 관리하는 클래스가 있습니다.

System.Threading.ThreadPool.QueueUserWorkItem (새 System.Threading.WaitCallback (SomeTask));

위의 줄은 작업을 대기열에 넣습니다. SomeTask 메소드에는 Object 유형의 매개 변수가 있어야합니다.

Q # 48) 직렬화 란 무엇입니까?

Ans : 직렬화 는 코드를 이진 형식으로 변환하는 프로세스입니다. 일단 바이트로 변환되면 디스크 나 다른 저장 장치에 쉽게 저장하고 쓸 수 있습니다. 일련 번호는 원래 형식의 코드를 잃고 싶지 않고 나중에 언제든지 검색 할 수있을 때 주로 유용합니다.

[Serializable] 속성으로 표시된 모든 클래스는 이진 형식으로 변환됩니다.

바이너리 형식에서 C # 코드를 다시 가져 오는 프로세스를 역 직렬화 라고 합니다.

직렬화 할 객체가 필요한 객체를 직렬화하려면 직렬화 된 객체 및 네임 스페이스 System.Runtime.Serialization을 포함 할 수있는 스트림이 직렬화를위한 클래스를 포함 할 수 있습니다.

Q # 49) 직렬화의 유형은 무엇입니까?

Ans :  직렬화의 다른 유형은 XML 직렬화, SOAP 및 이진입니다.

  • XML 직렬화 - 모든 공용 속성을 XML 문서에 직렬화합니다. 데이터는 XML 형식이므로 다양한 형식으로 쉽게 읽고 조작 할 수 있습니다. 클래스는 System.sml.Serialization에 있습니다.
  • SOAP - 클래스는 System.Runtime.Serialization에 있습니다. XML과 유사하지만 SOAP을 이해하는 모든 시스템에서 사용할 수있는 완전한 SOAP 호환 봉투를 생성합니다.
  • 이진 직렬화 - 모든 코드를 이진 형식으로 변환 할 수 있습니다. 공개 및 비공개 속성을 직렬화하고 복원 할 수 있습니다. 그것은 더 빠르며 적은 공간을 차지합니다.

Q # 50) XSD 파일이란 무엇입니까?

Ans :  XSD 파일은 XML 스키마 정의를 나타냅니다. XML 파일의 구조를 제공합니다. 즉, XML이 가져야하는 요소와 순서 및 속성이 무엇인지 결정합니다. XML과 연관된 XSD 파일이 없으면 XML은 모든 태그, 모든 속성 및 요소를 가질 수 있습니다.

Xsd.exe 도구는 파일을 XSD 형식으로 변환합니다. C # 코드의 직렬화 중에 클래스는 xsd.exe에 의해 XSD 호환 형식으로 변환됩니다.

결론

C #은 날마다 급속도로 발전하고 있으며 소프트웨어 테스팅 산업에서 중요한 역할을합니다.

이 기사를 통해 인터뷰 준비가 훨씬 쉬워지고 대부분의 C # 주제를 다루는 데 상당한 시간을 할애 할 것으로 확신합니다.

C # 인터뷰에 자신있게 응할 준비가 되셨기를 바랍니다 !!

'언어 > C#' 카테고리의 다른 글

C# 메소드,오버로딩  (0) 2018.12.10
C#기술면접 객체지향프로그래밍?  (0) 2018.12.10
주인공을 따라다니는 카메라 만들기 following camera  (0) 2018.12.10
TouchPad.cs  (0) 2018.12.10
예제로 배우는 C#  (0) 2018.12.07
using UnityEngine;
using System.Collections;

//FollowingCamera
//주인공 캐릭터를 카메라가 일정한 거리를 유지한 채로 따라다니게 합니다.
public class FollowingCamera:MonoBehavior
{
public float distanceAway=7f;
public float distanceUp=4f;

//따라다닐 객체를 지정합니다.
public Transform follow;

void LateUpdate(){
//카메라의 위치를 distanceUp만큼 위에, distanceAway만큼 앞에 위치시킵니다.
transform.position = follow.position + Vector3.up *distanceUp-Vector3.forward * distanceAway;
}
}


'언어 > C#' 카테고리의 다른 글

C#기술면접 객체지향프로그래밍?  (0) 2018.12.10
C# 해외 면접시 TOP50  (0) 2018.12.10
TouchPad.cs  (0) 2018.12.10
예제로 배우는 C#  (0) 2018.12.07
unity player movement.cs 플레이어 움직임 /유니티  (0) 2018.12.07
using UnityEngine;

using UnityEngine.UI;

using System;

using System.Collections;



public class touchpad:MonoBehavior{



//_touchPad 오브젝트를 연결합니다.

private RectTransform _touchPad;



//터치 입력중에 방향 컨트롤러의 영역안에 있는 입력을 구분하기 위한 아이디어입니다.

private int_touchId=-1;



//입력이 시작되는 좌표입니다.

private Vector3_startPos =Vector3.zero;



//방향 컨트롤러가 원으로 움직이는 반지름입니다.

public float _dragRadius=60f;



//플레이어의 움직임을 관리하는 PlayerMovement 스크립트와 연결합니다.

//방향키가 변경되면 캐릭터에게 신호를 보내야 하기 때문입니다.

public PlayerMovement _player;

//버튼이 눌렸는지 체크하는 bool 변수입니다.

private bool _buttonPressed=false;



void Start(){

// 터치패드의 RectTransform 오브젝트를 가져옵니다.

_touchPad =GetComponent<RectTransform>();



//터치패드의 좌표를 가져옵니다. 움직임의 기준값이 됩니다.

_startPos=_touchPad.position;

}



public void ButtonDown(){

//버튼이 눌렸는지 확인해 놓습니다.

_buttonPressed =true;

}



public void ButtonUp(){

_buttonPressed=false;

//버튼이 떼어졌을 때 터치패드와 좌표를 원래 지점으로 복귀시킵니다.

HandleInput(_startPos);

}



void FixedUpdate()

{

//모바일에서는 터치패드 형식으로 여러 터치 입력을 받아 처리합니다.

HandleTouchInput();
//모바일이 아닌 Pc나 유니티 에디터 상에서 작동할 때는 터치입력이 아닌 마우스로 입력 받습니다.
#if Unity_EDITOR || UNITY_STANDALONE_OSX||UNITY_STANDALONE_WIN || UNITY_WEBPLAYER

HandleInput(Input.mousePosition);

#endif
}

void HandleTouchInput()
{
//터치 아이디 (touchId)를 매기기 위한 번호입니다.
int i =0;
//터치 입력은 한 번에 여러 개가 들어올 수 있습니다. 터치가 하나 이상 입력되면 실행되도록 합니다.
if(Input.touchCount>0){
//각각의 터치 입력을 하나씩 조회합니다.
foreach(Touch touch in Input.touches){
i++;
//현재 터치 입력의 x,y좌표를 구합니다.
Vector3 touchPos = new Vector3(touch.position.x , touch.position.y);
//터치 입력이 방금 시작되었다면, 혹은 TouchPhase이면 ,
if(touch.phase == TouchPhase.Began){
//그리고 터치의 좌표가 현재 방향키 범위 내에 있다면
if(touch.position.x<=(_startPos.x + _dragRadius)){
//이 터치 아이디를 기준으로 방향 컨트롤러를 조작하도록 합니다.
_touchId=i;

}
}
//터치 입력이 움직였다거나, 가만히 있는 상황이라면
if(touch.phase == Touchphase.Moved|| touch.phase==TouchPhase.Stationary)
{
//터치 아이디로 지정된 경우에만
if(_touchId==i){
//좌표입력을 받아들입니다.
HandleInput
(touchPos);
}
}
//터치 입력이 끝났는데.
if(touch.phase == TouchPhase.Ended)
{
//입력받고자 했던 터치 아이디라면
if(_touchId==i){
//터치 아이디를 해제합니다
_touchId=-1;

}
}
}

}

void HandleInput( Vector3 input){
//버튼이 눌러진 상황이라면
if(_buttonPressed){

//방향 컨트롤러의 기준 좌표로부터 입력받은 좌표가 얼마나 떨어져 있는지 구합니다.
Vector3 diffVector = (input -_startPos);

//입력 지점과 기준 좌표의 거리를 비교합니다. 만약 최대치 보다 크다면
if(diffVector.sqrMagnitude> _dragRadius * _dragRadius)
{
//방향 벡터의 거리를 1로 만듭니다.
diffVector.Normalize();

//그리고 방향 컨트롤러는 최대치만큼만 움직이게 합니다.
_touchPad.position = _startPos+diffVector*_dragRadius;

//현재 입력 좌표에 방향키를 이동시킵니다.
}
else//입력 지점과 기준 좌표가 최대치보다 크지 않다면
{
//현재 입력 좌표에 방향키를 이동시킵니다.
_touchPad.position=Input;
}
}
else
{
//버튼에서 손이 떼어지면 , 방향키를 원래 위치로 되돌려 놓습니다.

_touchPad.position=_startPos;
}
}
//방향키와 기준 지점의 차이를 구합니다.
Vector3 diff = _touchPad.position =_startPos;

//방향키의 방향을 유지한 채로 거리를 나누어 방향만 구합니다.
Vector2 normDiff = new Vector3(diff.x/_dragRadius,diff.y/_dragRadius);

if(_player != null){
//플레이어가 연결되어 있으면 ,플레이어에게 변경된 좌표를 전달해줍니다.
_player.OnStickChanged(normDiff);
}

}
}




using 이걸 쓰겠다

system 시스템이라는 보따리에

generic 및 여러 라이브러리? 가있다


c#은 시작시에 main(){}함수를 끼고 시작한다


console 이라는 도화지에 console.readkey, console.writeline 은

각각 console.writeline("hello csharp") 을 쓰겠다는 것이고 run 하면 삭제된다

console.readkey()키를 읽어오겠다는 것이고 다음줄에서 깜빡깜빡 키입력을 기다리는것이다.

int a= 3;

a가 정수일경우

string b;

b= a.ToString();을 실행하면 

정수였던 a 가 ToString()으로 읽혀서 문자열로 출력된다.


maint( string [] arg){

//일경우


console.writeline("hello csharp"+ b);

//출력시 hello csharpb


}


콘솔창에 hellocsharp 클래스 경로 수정후 

hellocsharp 과 test test

라고 입력하면

2가 출력되는데 이유는 string 값에 2개가 입력되기 때문이다.


위에는 비주얼스튜디오에서 console.form 으로 만들었을때 프로젝트도


winform프로젝트는 fomr 을 주고 레이블을 삽입후

레이블 밸류값을 수정 가능하고

클릭 이벤트 및 객체에 마우스를 올릴때 손모양이 바뀌는 기능을 제공하며


함수에는 여러 이벤트를 컨트롤하는 이벤트 핸들러가 있고 대부분 ide에서 제공한다. 



using UnityEngine;

using System;

using SystemCollections;


//클래스 선언 위에 RequireComponent(typeof(Animator))라는 구문은

//이 게임 오브젝트에 Animator가 없으면 안된다고 명시하는 역활을 합니다.

//이 스크립트가 붙어 있는 게임 오브젝트에 Animaotr 컴포넌트가 없으면 게임이 실행되지 않는다


[RequireComponent(typeof(Animator))]

public class PlayerMovement:MonoBehaviour{


//이 게임 오브젝트에 붙어있는 Animator 컴포넌트를 가져온다

protected Animator avatar;


float lastAttackTime,lastSkillTime,lastDashTime;

public bool attacking=false;

public bool dashing=false;

void Start(){

avatar=GetComponent<Animator>();

}


//h:Horizontal 방향 컨트롤ㄹ러의 가로방향

//v:Vertucal 방향 컨트롤러의 세로뱡항입니다.

float h,v;


//방향 컨트롤러에서 컨트롤러에 변경이 일어나면 호출되는 ㅎ마수입니다.

public void OnStickChanged(Vector2 stickPos)

{

h= stickPos.x;

v=stickPos.y;

{

//매 프레임마다 터치 컨트롤러에서 오는 신호를 애니메이터에 전달합니다.

voidupdate(){

//아바타(애니메이터)가 있어야만 제대로 실행됩니다.

if(avatar){

float back=1f;

if(v<0f)back=-1f;

//애니 메이터에 전달하는 값은 속도 뿐입니다.

avatar.SetFloat("Speed",(h*h+v*v));


Rigidbody rigidbody =GetComponent<Rigidbody>();


if(rigidbody){


Vector3 speed=rigidbody.velocity;

speed.x=4*h;

speed.z=4*v;

rigidbody.velocity=speed;

if(h!=0f && v!=0f){

//캐릭터의 방향 전환은 즉시 이루어지며,

//애니메이터에 전달되지 않고 자체적으로 해결합니다.

transform.rotation=Quaternion.LookRotation(new Vector3(h,0f,v));

}

}

}}


public void OnAttackDown(){

attacking =true;

avatar.SetBool("Combo",true);

StartCoroutine(StartAttack());

}


public void OnAttackUp(){

avatar.SetBool("Combo",false);

attacking=false;

}


IEnumerator StartAttack(){

if(TIme.time-lastAttackTime>1f){

lastAttackTime= TIme.time;

while(attacking){

avatar.SetTrigger("AttackStart");

yield return new WaitForSeconds(1f);

}

}}


public void OnSkillDown(){

if(Time.time-lastSkillTime>1f){

avatar.SetBool("Skill,true");

lastSkillTime=Time.time;

}

}


public void OnSkillUp()

{

avatar.SetBool("Skill",false);

}


public void OnSkillDown()

{

if(Time.time-lastSkillTime>1f)

{

avatar.SetBool("Skill".true);

lastSkillTime=TIme.time;

}

}


public void OnSkillUp()

{

avatar.SetBool("Skill".true);

lastSkillTime=Time.time;

}


public void OnDashDown()

{

if(Time.time-lastDashTime>1f){

lastDashTime=Time.time;

dashing=true;

avatar.SetTrigger("Dash");

}


public void OnDashUp()

{    

dashing=false;

}{

}

//클래스 선언 위에 RequireComponent(typeof(Animator))라는 구문은

//이게임 오브젝트에 Animator가 없으면 안된다고 명시하는 역활을 합니다.

// 이스크립트가 붙어있는 게임오브젝트에 Animator컴포넌트가 없으면 게임이 실행되지않습니다.






'언어 > C#' 카테고리의 다른 글

C# 해외 면접시 TOP50  (0) 2018.12.10
주인공을 따라다니는 카메라 만들기 following camera  (0) 2018.12.10
TouchPad.cs  (0) 2018.12.10
예제로 배우는 C#  (0) 2018.12.07
게임 개발 전체 프로세스  (0) 2018.12.07

유니티 3d엔진을 공부하는 이유


게임업계에서 지배적인 점유율을 가지고 있다

게임 스타트업을 위해 가장 현실적인 게임엔진

게임업계에 취직할 때 스킬 세트로 큰도움이 된다



게임회사의 입장

게임회사는 유니티 엔진을 다룰수있느개발자를 필요로할까요?

정해진 예산 안에서 게임을 잘 만들어서 돈을 벌기위해서



-훌륭한 기계공은 일반 기계공보다 몇 배의 급여를 더 높이 받는다 그러나 훌륭한 코드를 만들어내는 개발자는 일반적인 개발자보다 1만배 이상의 가치가있다-

-빌게이츠-

'언어 > C#' 카테고리의 다른 글

C# 해외 면접시 TOP50  (0) 2018.12.10
주인공을 따라다니는 카메라 만들기 following camera  (0) 2018.12.10
TouchPad.cs  (0) 2018.12.10
예제로 배우는 C#  (0) 2018.12.07
unity player movement.cs 플레이어 움직임 /유니티  (0) 2018.12.07

+ Recent posts