본문 바로가기

Study_C#

[C#] Various Keywords, Methods

728x90

- new()

  • Object 생성 시 사용
  • C#에서는 내장 Class인 string, int, double 등을 포함한 모든 Class Object를 상속받으므로 new keyword를 통해 object 생성 가능
CANClass canClass = new CANClass();

canClass.CANConnect();

 

 

- Application.DoEvents()

  • Window는 여러 작업을 동시에 처리하는 것이 아닌 Queue 내에 Message(작업)가 들어온 차례대로 작업을 처리
  • 특정 Process가 자원을 점유하는 동안에 다른 작업들은 Queue 내에서 대기
  • DoEvents Method는 이런 대기중인 Queue의 Window Message(Click, Keyboard 입력 등)을 처리하라는 명령
  • 즉 다른 작업이 수행중일 때 Queue 내의 입력을 처리하라는 뜻
    • 프로그램 동작 중 Buffer에 쌓여있는 처리 내용을 강제로 뿌려주는 명령어
    • 이를 통해 동작 중에 Form을 Update 할 수 있

 

- Ex) 대용량의 Text 문서를 한줄씩 읽어오는 코드

while(ture){
    // Read one line
    // End while loop if meets EOF
}
  • 위 코드의 경우 while 문 안에서만 로직이 돌기 때문에 Text를 다 읽을때까지 계속해서 Window 자원을 점유함
  • 이 경우 실행 중인 Form이 응답하지 않고, 사용자 클릭, 키보드 입력 등도 먹지 않음

 

while(ture){
    // Read one line
    // End while loop if meets EOF
    Application.DoEvents();
}
  • 위 코드의 경우 Text의 한 줄을 읽을 때 마다 Queue에 쌓인 Message들을 처리해줌
  • 따라서 사용자 입력 등이 원활하게 작용함

 

- FirstOrDefault()

  • 매개변수가 생략된 경우 컬렉션의 첫 번째 요소를 Return
  • Parameter가 존재하는 경우 람다식 혹은 함수 대리자의 조건을 만족하는 첫 번째 요소를 Return
  • 지정된 조건을 만족하는 요소가 없거나 빈 컬렉션에서 FirstOrDefault() 함수를 호출하면, 컬렉션 데이터 유형의 기본 값을 Return
class Example
{
  static void Main(string[] args)
  {
    List<int> intList = new List<int>()
    {
      10, 20, 30, 40, 50
    };

    int getFristElement1 = intList.FirstOrDefault(num => num % 20 == 0);
    int getFristElement2 = intList.FirstOrDefault(num => num % 100 == 0);

    Console.WriteLine($"첫 번째 요소: {getFristElement1}");
    Console.WriteLine($"첫 번째 요소: {getFristElement2}");
  }
}

첫 번째 요소: 20
첫 번째 요소: 0
  • Collection Object intList는 Integer Type이므로 해당 Type의 Default 값인 0을 Return

 

- foreach()

  • 끝을 지정해주는 다른 반복문과 달리, Parameter로 들어온 Iterable Item의 내부 Index 끝까지 알아서 순환을 해주는 반복문
class Example{
	static void Main(string[] args){
    	int[] arr = {1, 2, 3, 4, 5};
        
        foreach(int num in arr){
        	Console.WriteLine(num);
        }
    }
}

[결과]
1
2
3
4
5
  • 1D Array 뿐만 아니라 2D Array, Enum Type에도 사용 가능

 

- #region, #endregion

  • 코드에서의 일부분을 확장하거나 축소할 수 있는 영역으로 지정하는 전처리기 지시문
#region Example to Reduce
public class Ex_to_Reduce{
	... ...
    ... ...
}
#endregion
  • 위의 두 전처리기 사이의 내용을 축소하거나 다시 확장시킬 수 있다

 

- interface

  • Class와 비슷하게 Method, Property, Event, Indexer 등을 갖지만 이를 직접 구현하지 않고 단순히 정의만을 함(Prototype Defintion)
    • Abstract Member로만 구성된 Abstract Base Class와 개념적으로 유사
    • 단 한 Class는 하나의 Abstract Base Class만을 가질 수 있으나, Interface는 여러 개를 가질 수 있다 
  • 이를 다른 Class에서 상속받아 사용하는 방식
interface IExample{
	//// Interface 정의 시에는 Member Variable의 접근 제한자를 지정하지 않음
	void printString();
    	int ReturnNum();
}

class CExample : IExample{
	public void printString(){
    	Console.WriteLine("Hello, World!");
    }
    
    public int ReturnNum(){
    	return 100;
    }
}
  • Interface 예제

 

- OfType() 

  • Collection의 Type을 '< >' 내의 Type으로 변환함
class Example{
	static void Main(){
    	object[] arr = {"ABC", 1, 2, 3.10, "DE"};
        
        var var1 = arr.OfType<string>;
        var var2 = arr.OfType<int>;
        var var3 = arr.OfType<double>;
        
        Console.WriteLine($"String : {var1}");
        Console.WriteLine($"Integer : {var2}");
        Console.WriteLine($"Double : {var3}");
    }
}

 

 

 

- out / ref

  • 둘 모두 함수의 parameter 앞에 붙는 parameter 한정자의 일종으로, parameter를 참조 형태로 전달하는데 사용한다

1) out

  • out keyword를 사용한 parameter는 함수 종료 전 내부에서 반드시 값을 할당해줘야 함
    • parameter 값을 전달 받기 전에는 값이 할당되어있지 않아도 괜찮음
    • 즉 수 호출 전 전달되는 paraemter의 정확한 값을 몰라도 사용이 가능
  • 함수 내에서 전달하는 변수를 초기화할 때 적합
class Program
{
    static void Main(string[] args)
    {
        int var;
        OutFunction(out var);
        Console.WriteLine("var : ", var);
    }

    // out keyword
    public static void OutFunction(out int i)
    {
        i = 10; // 내부에서 반드시 할당되어야한다.
    }
}

 

2) ref

  • ref keyword를 사용한 parameter는 함수에 값을 전달하기 전 초기화 되어야 함
  • 함수 내에서 전달하는 변수를 변경해야 할 때 적합 
class Program
{
    static void Main(string[] args)
    {
        int var = 1; // 전달하기 전에 초기화 되어야한다.
        RefFunction(ref var);
        
        Console.WriteLine("var : ", var);
    }

    // ref keyword
    public static void RefFunction(ref int i)
    {
        i = 10;
    }
}

 

- Zip

  • 지정된 함수를 두 시퀀스의 해당 요소에 적용하여 결과 시퀀스를 만듦
public static IEnumerable<TResult> Zip<TFirst, TSecond, TResult>
(this IEnumerable<TFirst> first, IEnumerable<TSecond> second, 
Func<TFirst, TSecond, TResult> resultSelector);

 

- 형식 Parameter

  • TFirst : 첫 번째 입력 시퀀스 요소의 형식
  • TSecond : 두 번째 입력 시퀀스 요소의 형식

 

- Parameter

  • first : 병합할 첫 번째 시퀀스
  • second : 병합할 두 번째 시퀀스
  • resultSelector : 두 시퀀스의 요소를 병합하는 방법을 지정하는 함수

 

using System;
using System.Linq;

namespace ConsoleApp5
{
    class Program
    {
        static void Main(string[] args)
        {
            int[] numbers = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 };
            string[] words = { "one", "two", "three", "four", "five", "six", "seven", "eight", "nine" };

            var result = numbers.Zip(words, (numberIndex, wordsIndex) => $"{numberIndex} = {wordsIndex}");

            foreach (var item in result)
            {
                Console.WriteLine(item);
            }
        }
    }
}

[Output]
1 = one
2 = two
3 = three
4 = four
5 = five
6 = six
7 = seven
8 = eight
9 = nine

 

- ToolTip

  • 아래처럼 마우스를 해당 Control에 올려놨을 경우 설명 창이 뜨도록 하는 Method

private void MouseHover(object sender, EventArgs e){
	Label lbl = (Label)sender;
    t_Tip.SetToolTip(lbl, "Example of ToopTip");
}

 

 

- Form1(), Form1_Load()

  • Form1()은 생성자, Form1_Load()는 Form1을 Load할 때 호출되는 Event
  • Form1()이 먼저 호출되고 바로 후에 Form1_Load()가 호출된다
    • 생성자는 다른 모든 Window들이 초기화 되기 전 실행
    • 위 호출은 자동적으로 일어남
  • 미연의 오류를 방지하기 위해 초기화 구문은 Form1_Load()에 배치하는 것이 적절함

 

- Count()

  • Collection의 요소의 갯수를 세는 method
List<int> numbers = new List<int> { 1, 2, 3 };
int count = numbers.Count;  // count will be 3

ArrayList list = new ArrayList { 1, 2, 3 };
int count = list.Count;    // count will be 3

 

 

- StreamWriter

  • C#에서 File을 읽고 쓰기 위한 Stream
  • Stream : File, Network 등에서 Data를 byte 단위로 읽고 쓰는 Class
    • Stream Class는 상위 기본 Class에 속함
  • File Stream : File 입출력을 다루는 기본 Class
    • byte[] 배열로 Data를 읽거나 저장
  • StreamWriter : File에 Data를 쓸 때 사용하는 Class
string FilePath = "Example.csv";

string str = "This ";
str += "is for ";
str += "example";

// true : FilePath에 해당하는 파일이 없을 경우 그 이름으로 파일을 생성하고, 
// 파일이 이미 존재할 경우 그 Data를 추가로 Write하게 함 (Overwrite X)
using (StreamWriter file = new StreamWriter(FilePath, true)) {
    file.WriteLine(str);
    file.WriteLine("End of example");
}
  • 위처럼 String을 지정한 File에 한 줄씩 쓸 수 있다
  • File을 닫는 과정을 까먹었을 경우를 방지하기 위해 using 사용
  • StreamReader : File의 Data를 읽을 때 사용하는 Class

 

 

 

 

 


참고 자료 : 

https://m.cafe.daum.net/beginWeb/VSQF/36?

 

Application.DoEvents() 사용

윈도우는 여러 작업이 동시에 처리되는것처럼 보이지만 실제로는 큐란 공간에 메시지가 들어오는 차례대로 작업이 처리됩니다. 그래서 아무리 용을 써도 큐에 먼저 들어온 순대로 처리를 해주

m.cafe.daum.net

 

https://stackoverflow.com/questions/5181777/use-of-application-doevents

 

Use of Application.DoEvents()

Can Application.DoEvents() be used in C#? Is this function a way to allow the GUI to catch up with the rest of the app, in much the same way that VB6's DoEvents does?

stackoverflow.com

 

https://captainyellow.tistory.com/272

 

Application.DoEvents()

Application.DoEvents();현재 메시지 큐에 있는 모든 Windows 메시지를 처리합니다. 응용프로그램을 만들고 폼의 빠른 업데이트를 화면을 보고 싶을때.버퍼에 쌓여 있는 처리내용을 강제로 뿌려주는 명

captainyellow.tistory.com

 

https://developer-talk.tistory.com/622

 

[C#]LINQ 첫 번째 요소 가져오기 - First, FirstOrDefault 메서드

첫 번째 요소 가져오기 C#의 Linq는 데이터 집합에서 첫 번째 요소를 가져올 수 있는 기능을 제공합니다. - First() 메서드 - FirstOrDefault() 메서드 이번 포스팅은 두 가지 함수 사용 방법을 소개합니다

developer-talk.tistory.com

 

https://blockdmask.tistory.com/313

 

[C#] foreach 사용법과 다양한 예제

안녕하세요. BlockDMask 입니다.오늘은 C#에 존재하는 조금 특별한 반복문 foreach에 대해서 알아보도록 하겠습니다.1. foreach에 대해서(1) foreach 란?- 끝을 지정해주는 다른 반복문과 달리, 인자로 들어

blockdmask.tistory.com

 

https://eboong.tistory.com/63

 

C# foreach문 제대로 알고 사용 하자!

블로거 여니입니다! 오늘은 C# foreach문에 대한 포스팅을 진행해보려고 합니다. foreach문은 배열을 순회하면서 각각의 데이터 요소들에 순서대로 접근을 할 수 있도록 해주는 역할을 해요 그래서

eboong.tistory.com

 

https://jettstream.tistory.com/57

 

C# Ref 와 Out 키워드 차이점에 대해서

ref키워드는 변수를 참조 형태로 전달하는데 사용된다. 이는 변수가 메서드 안에서 변경될 수 있다는 뜻이다. out키워드 또한 변수를 참조 형태로 전달하는데 사용된다. 하지만 변수를 전달하기

jettstream.tistory.com

 

https://m.blog.naver.com/sunflowerove/60025990287

 

COM 이란?

COM 소개     COM(Component Object Model)의 뜻에서도 알 수 있듯이 Conponent ...

blog.naver.com

 

https://shanael.tistory.com/9

 

[C# WinForm] ToolTip 사용법

C# WinForm에서 ToolTip 사용법에 대한 설명입니다. 아래 실황화면처럼 마우스를 해당 컨트롤에 위치 시켰을 때 ToolTip이 표시되도록 하는 방법입니다. [실행화면] 1. 첫번째로 WinForm 프로젝트를 하나

shanael.tistory.com

 

https://chopstick-91.tistory.com/25

 

[C#] 코딩의기술(실전편) - 3.7 Cast VS OfType

1. Cast 메서드 컬렉션의 형을 변환해주는 메서드입니다. 하지만 Cast메서드를 사용해도 형이 맞지 않을 때, 예외가 발생합니다. static void Example_Cast() { object[] arr = { 1, 2, 3,"test" }; var q = arr.Cast(); Conso

chopstick-91.tistory.com

 

'Study_C#' 카테고리의 다른 글

[C#] Get, Set 키워드  (0) 2024.07.30
[C#] Invoke, InvokeRequired, Delegate  (0) 2024.07.30
[C#] Using의 2가지 사용법  (0) 2024.07.30
[C#] 비동기 관련  (0) 2024.07.06
[C#] 자료형 정리  (0) 2024.07.06