Person Struct (in C)
http://dis.dankook.ac.kr/lectures/hci12/entry/Person-Struct-in-C
Person Struct (in C++)
http://dis.dankook.ac.kr/lectures/hci12/entry/Person-Struct-in-C-1
Person Struct (in C#)
http://dis.dankook.ac.kr/lectures/hci12/entry/Person-Struct-in-C-2
Category Archives: C# Programming
string + operator vs integer + operator
Console.WriteLine(“str={0}”, str + 70); // 12370
Console.WriteLine(“str={0}”, str + “70”); // 12370
int i = 123;
Console.WriteLine(“i={0}”, i + 70); // 193
Convert.ToIn32 vs Int32.Parse vs Int32.TryParse
Convert.ToInt32(string s)는 내부적으로 Int32.Parse(string s)을 불러서 string을 32-bit signed integer로 변환시켜주는 메소드
string s2 = “1234.65″;
string s3 = null;
string s4 = “123456789123456789123456789123456789123456789″;
int result;
bool success;
result = Convert.ToInt32(s1); //— 1234
result = Convert.ToInt32(s2); //— FormatException
result = Convert.ToInt32(s3); //— 0
result = Convert.ToInt32(s4); //— OverflowException
Int32.Parse(string s)는 strng을 32-bit signed integer로 변환시켜주는 메소드
그러나 만약 s가 null일 경우 ArgumentNullException을 냄
또한 s가 integer가 아닐 경우 FormatException을 냄
또한 s가 integer의 MinValue또는 MaxVale를 넘칠 경우 OverflowException을 냄
result = Int32.Parse(s2); //— FormatException
result = Int32.Parse(s3); //— ArgumentNullException
result = Int32.Parse(s4); //— OverflowException
Int32.TryParse(string s, out int i)는 string을 32-bit signed integer로 변환하여 out 에 보내주는 메소드로 성공하면 true를 반환
따라서 만약 s가 null일 경우 ArgumentNullException을 내지않고 false와 out으로 0을 반환
또한 s가 integer가 아닐 경우 FormatException을 내지않고 false와 out으로 0을 반환
또한 s가 integer의 MinValue또는 MaxVale를 넘칠 경우 OverflowException을 내지않고 false와 out으로 0을 반환
success = Int32.TryParse(s2, out result); //— success => false; result => 0
success = Int32.TryParse(s3, out result); //— success => false; result => 0
success = Int32.TryParse(s4, out result); //— success => false; result => 0
Boxing과 Unboxing을 최소화하라
Boxing은 값 형식 (value type)을 참조 형식 (reference type)으로 변경하는 것이다.
Boxing을 수행하면 힙 상에 새로운 reference type 객체가 생성되고 value type의 객체가 가지고 있던 값이 reference type 객체 내부로 복사된다.
새로 생성된 reference type 객체는 내부적으로 value type 객체의 복사본을 포함하고, value type에서 제공하였던 interface를 그대로 재구현한다.
Unboxing은 참조 형식 (reference type)을 값 형식 (value type)으로 변경하는 것이다.
만약 reference type 객체 내부에 포함된 value type 객체의 값을 얻고자 시도하면 복사본을 만들어서 돌려준다.
Console.WriteLine(“Numbers: {0}, {1}, {2}”, 10, 20, 30);
Console.WriteLine()은 System.Object의 배열을 인자로 받는데, 정수들은 모두 value type이기때문에 value type의 인자로 전달하기 위해서는 reference type으로 boxing이 수행된다.
Boxing과 Unboxing 동작은 필요시 자동적으로 일어나며, 이 과정에서 컴파일러는 어떠한 경고도 발생시키지 않는다. WriteLine(…)을 호출할 때에는, 아래와 같이 value type을 string type instance로 변경하는 것이 좋다.
Console.WriteLine(“Numbers: {0}, {1}, {2}”, 10.ToString(), 20.ToString(), 30.ToString());
이 코드는 string type을 사용하기 때문에 value type들은 더이상 System.Object 로 변경되지 않는다.
Boxing vs Unboxing
int i = 123;
object o = i; // boxing (값 형식 -> 참조 형식)
int j = (int) o; // unboxing (참조 형식 -> 값 형식)
Data Type
Boolean (bool)
Character (char)
Enumeration (enum)
Numeric (int, long, float, double, decimal, etc)
String
Object
Struct
ArrayTest
StructTest
http://www.hoons.kr/Lecture/LectureMain.aspx?BoardIdx=151&kind=4&view=0
enum, struct
http://www.hoons.kr/Lecture/LectureMain.aspx?BoardIdx=48206&kind=53&view=0
http://www.hoons.kr/Lecture/LectureMain.aspx?BoardIdx=152&kind=4&view=0
http://csharpstudy.com/CSharp/CSharp-struct.aspx
string
http://www.hoons.kr/Lecture/LectureMain.aspx?BoardIdx=48205&kind=53&view=0
System.Object
http://www.hoons.kr/Lecture/LectureMain.aspx?BoardIdx=155&kind=4&view=0
Generics (C# 2.0)
http://www.hoons.kr/Lecture/LectureMain.aspx?BoardIdx=153&kind=4&view=0
Nullable (C# 2.0)
http://csharpstudy.com/CSharp/CSharp-datatype.aspx
var (implicit type) (C# 3.0)
http://msdn.microsoft.com/ko-kr/library/bb383973.aspx
Value Type vs Reference Type
값 형식(Value Type)과 참조 형식(Reference Type)
구분 | 값 형식(Value Type) | 참조 형식(Reference Type) |
종류 | 내장형 (int, char, float,…) 사용자 정의형 (enum, stuct) | Object, string, class, interface, delegate, .. |
메모리 사용 | 스택 | 스택, 힙 |
대입(Assignment) | 복사 | 참조 변경 |
크기 | 고정 | 가변 |
Garbage Collector 지원 | 지원 안됨 | 지원 됨 |
값형식(Value Type)은 메모리를 직접 가리킨다.
참조형식(Reference Type)은 메모리를 참조를 통해서 가리킨다.
값형식(Value Type)은 변수의 선언과 동시에 메모리에 생성한다.
참조형식(Reference Type)은 변수의 선언과 메모리 생성 분리하여 생성한다.
값형식(Value Type)은 값형식끼리 할당 할 때 메모리의 값들을 그대로 복사한다.
참조형식(Reference Type)은 참조형식끼리 할당 할때 참조값만을 복사한다.
http://dis.dankook.ac.kr/lectures/hci10/entry/Value-Type과-Reference-Type의-비교
Stack vs Heap
스택(Stack)은 Last-In, First-Out(LIFO) 방식으로 아이템을 저장하는 메모리의 자료 구조이다.
스택(Stack)은 지역변수(local variable)와 함수 리턴주소를 저장한다. C#에서 값형식(Value Type) 데이터는 스택에 저장된다.
힙(Heap)은 프로그램 코드 영역과는 별도로 유지되는 자유 메모리 공간이다.
힙(Heap)은 C#에서 new를 사용하여 메모리 할당하여 이 공간을 사용할 수 있다.
힙에 할당된 데이터는 전역변수(global variable)처럼 프로그램이 종료될 때까지 유지된다.
C#에서는 더이상 참조하지 않는 데이터를 자동으로 해제해준다 (gabage collection).
C#에서는 참조형식(Reference Type)은 스택에 메모리 주소를 저장하고 힙에 실질적인 데이터가 저장된다.
http://en.csharp-online.net/Stack_vs._Heap
http://stackoverflow.com/questions/79923/what-and-where-are-the-stack-and-heap
Main Method
http://msdn.microsoft.com/ko-kr/library/acy3edy3(v=vs.100).aspx
– Main 메서드는 프로그램 제어가 시작되고 끝나는 .exe 프로그램의 진입점입니다.
– Main은 클래스 또는 구조체 내부에 선언됩니다.Main은 static이어야 하며 public이 아니어야 합니다.이전 예제에서 이 메서드에는 기본 액세스 수준인 private이 지정되었습니다. 이 메서드의 바깥쪽 클래스나 구조체는 정적일 필요가 없습니다.
– Main은 void 또는 int 반환 형식일 수 있습니다.
– Main 메서드는 명령줄 인수를 포함하는 string[] 매개 변수가 있거나 없는 상태로 선언할 수 있습니다.Visual Studio를 사용하여 Windows Forms 응용 프로그램을 만드는 경우 수동으로 매개 변수를 추가하거나 Environment 클래스를 사용하여 명령줄 인수를 가져올 수 있습니다.매개 변수는 명령줄 인수(0부터 시작)로 읽습니다. C 및 C++와 달리 프로그램의 이름은 첫 번째 명령줄 인수로 취급되지 않습니다.
{
static void Main(string[] args)
{
// Display the number of command line arguments:
System.Console.WriteLine(args.Length);
}
}
.Net namespace
네임스페이스 | 설명 |
System | 타입, 메모리 관리 등 핵심 클래스들 |
System.Collections | 배열, 연결 리스트 등의 컬렉션 클래스 |
System.IO | 파일 입출력 및 네트워크 관련 클래스 |
System.Windows.Forms | 윈도우즈 폼과 컨트롤 |
System.Drawing | GDI+ |
System.Web | 웹 개발에 관련된 클래스 |
System.Xml | XML 관련 클래스들 |
System.Security | 보안, 암호, 권한 관련 클래스 |