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?
https://stackoverflow.com/questions/5181777/use-of-application-doevents
https://captainyellow.tistory.com/272
https://developer-talk.tistory.com/622
https://blockdmask.tistory.com/313
https://jettstream.tistory.com/57
https://m.blog.naver.com/sunflowerove/60025990287
https://chopstick-91.tistory.com/25
'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 |