반응형

C# 10

C#과 Python: yield return과 yield 비교

Python에서 generator는 한 번 쓰고 또 쓰면 아무 값이 나오지 않는다. 반복문을 딱 한 번만 돈다. 일회용이다.>>> def f():... for i in range(10):yield i...>>> a=f()>>> print(*a)0 1 2 3 4 5 6 7 8 9>>> print(*a)>>>   그렇다면 C#에서는 어떨까?using System;using System.Collections.Generic;using System.Collections.Specialized;using System.Linq;using System.Text.RegularExpressions;using System.Threading;namespace ConsoleApp1{ internal class Pro..

C# 2024.12.26

explicit interface implementation

Array class는 분명 IList 인터페이스를 구현하고 있다. 그런데 왜 .Count 속성을 쓸 수 없는 걸까?explicit interface implementation을 이용해서 그렇다. 이렇게 인터페이스를 구현할 경우, 인터페이스로 타입 캐스팅을 해주지 않으면 메소드를 호출할 수 없다.using System;using System.Collections.Generic;using System.Text.RegularExpressions;using System.Threading;namespace ConsoleApp1{ internal class Program:IDisposable { private static void Main() { new Pr..

C# 2024.12.24

public 대신 internal을 사용할 수 있다면 internal을 쓰자.

접근 제한자는 엄격할 수록 프로그래머의 선택지를 줄일 수 있으므로 좋다. 하지만 그럼에도 불구하고 나는 public을 internal 대신 써 왔는데, 그 이유는 단순했다. public은 6글자고 internal은 8글자였기 때문이다. 쓰는데 후자가 33% 더 오래 걸린다. 그런데 오늘 버그를 하나 발견하면서 internal을 써야겠다고 다짐했다. 컴파일러가 보내주는 경고는 디버깅에 도움이 될 수 있는데, internal을 쓰면 절대 초기화되지 않는 변수를 판정할 수 있다. 아래 소스 코드를 컴파일하면using System;namespace ConsoleApp1{ public class Program { internal byte va; static void Main()..

C# 2024.12.21

C# .NET Framework 4.8 프로젝트에서 SQLite 사용하는 방법

1. 상위 메뉴에서 Project - Manage NuGet Packages... 를 클릭한다.2. System.Data.SQLite를 검색하고 맨 위에 뜨는 걸 Install한다.3. Install을 마치고 나면 이상하게 콘솔 애플리케이션을 실행해도 콘솔이 안 보이는 이상 현상이 생긴다. Visual Studio를 재시작하면 문제가 해결된다.4. System.Data.SQLite 네임스페이스에서 다음과 같이 Connection과 Command를 끌어다가 사용하면 된다.using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Data.SQLi..

C# 2024.11.12

csc로 라이브러리 만들기

■ 라이브러리 만들 때 접근 제한자 주의 dll로 만들고자 하는 소스 파일의 클래스 제한을 public으로 바꿔줘야 한다. 앞서서 LogWriter.cs 모양은 아래와 같았음 Program.cs using System; class Program { static void Main(string[] args) { LogWriter logWriter = new LogWriter(); logWriter.Write("start"); } } LogWriter.cs using System; class LogWriter { public void Write(string txt) { Console.WriteLine(txt); } } class LogWriter 앞에 접근 제한자가 명시되어 있지 않지만, 이런 경우 inter..

C# 2022.12.09

접근 제한자

● 접근 제한 유형 private: 내부에서만 접근 허용. "사설", "개인", "전용"이라고 부름 protected: 내부에서의 접근과 함께 파생 클래스에서만 접근 허용 public: 내부, 파생 클래스, 및 외부에서 접근 허용. "공용" internal: 동일한 어셈블리 내에서는 public에 준한 접근 허용. 다른 어셈블리에서는 접근 불가 internal protected: 동일 어셈블리 내에서 정의된 클래스. 다른 어셈블리라면 파생 클래스인 경우에 한해 접근 허용. 즉, internal 또는 protected 조건 클래스 정의할 때 접근제한자를 생략했다면 그 클래스는 무조건 internal로 설정. 클래스 내부 멤버가 그냥 정의되었다면 무조건 private이다. 즉, 클래스는 범용으로 사용하는 경..

C# 2022.12.08

C# 배포 파일 만들기

◈ 프로그램 배포를 위한 설치파일 만들기 ◈ ※ Visual Studio 17.3.0을 기준으로 설명. 버전마다 메뉴 위치가 다르니 주의할 것 ■ 인스톨러 설치하기 비주얼스튜디오 [확장]→ [확장 관리] [온라인] 선택 후, 검색 창에서 'installer'라고 치면 나오는 것 중에 아래 그림처럼 선택하여 다운로드 ■ 셋업 프로젝트 추가하기 배포하고자 하는 프로젝트를 완성했다는 가정하에서, 솔루션 탐색기 [마우스 우클릭] → [추가] → [새 프로젝트] 새 프로젝트 창이 열리면, 언어, OS, 플랫폼을 선택한 후, 검색 창에서 'setup'이라고 입력한다. 첫번째를 선택한다. [다음] 클릭 → kwnatest 아래에 setup_test라는 디렉토리가 생김 새 프로젝트 구성 창에서 이름 정한 후 [만들기]..

C# 2022.12.03
반응형