Category Archives: C# Programming

class

protected 접근자
-protected 접근 지정자를 사용한 멤버 필드와 메소드는 파생 클래스에서는 사용가능하나 클래스 외부에서는 호출하지 못함


static 필드와 메소드
-static field는 전역 데이터로 클래스당 하나만 할당됨
-클래스명.정적필드명 형태로 사용
-static method는 class method나 static member field 조작을 위한 메소드
-static method는 instance field는 접근 불가능

constructor (생성자)
-default constructor (기본 생성자)
-constructor overloading (생성자 오버로딩) 생성자를 여러 가지 형태로 정의
-constructor initializer (생성자 초기화 목록) 생성자들 사이의 정의가 비슷한 경우 코드를 간략하게 만들기 위해 사용

-private constructor (private 생성자) 정적 멤버만 포함하는 클래스에서 사용하며 클래스가 인스턴스화 될 수 없음을 분명히 하기 위해 private 접근 지정자를 사용
-static constructor (static 생성자) 정적 데이터 멤버를 초기화하는데 사용

destructor (소멸자)
-객체가 소멸될 때 필요한 정리 작업을 정의하는 부분    

0부터 100까지 숫자만 입력받기


int value;  // needed for TryParse
string str; // needed for ReadLine


Console.Write(“0부터 100까지 숫자를 입력하세요: “);
str = Console.ReadLine();
while ((!int.TryParse(str, out value)) || (value < 0 || value > 100))
{
        Console.Write(“다시 0부터 100까지 숫자를 입력하세요: “);
        str = Console.ReadLine();
}
int result = int.Parse(str);
Console.WriteLine(“입력된 숫자=” + result);

ESCAPE 키가 눌린게 아니면 프로그램이 계속 실행되기

    class Program
    {
        static double Add(double a, double b)
        {
            return (a + b);
        }


        static void Main(string[] args)
        {
            do
            {
                Console.Write(“a를 입력하세요: “);
                string str = Console.ReadLine();
                double a;
                bool result = double.TryParse(str, out a);


                Console.Write(“b를 입력하세요: “);
                str = Console.ReadLine();
                double b;
                result = double.TryParse(str, out b);


                double c = Add(a, b);
                Console.WriteLine(“결과는 {0}”, c);


                Console.WriteLine(“다시 하려면 ENTER 키를 누르시고 종료하려면 ESC 키를 누르세요”);
            } while (Console.ReadKey().Key != ConsoleKey.Escape);
        }
    }

Why need boxing and unboxing

Why do we need boxing and unboxing in C#?
http://stackoverflow.com/questions/2111857/why-do-we-need-boxing-and-unboxing-in-c



    struct Point
    {
        public int x, y;
        public Point(int x, int y)
        {
            this.x = x;
            this.y = y;
        }


        public override string ToString()
        {
            return String.Format(“{0} {1}”, this.x, this.y);
        }
    }


    class Point2
    {
        public int x, y;
        public Point2(int x, int y)
        {
            this.x = x;
            this.y = y;
        }


        public override string ToString()
        {
            return String.Format(“{0} {1}”, this.x, this.y);
        }
    }


    class Program
    {
        static void Print(object o)
        {
            Console.WriteLine(o);
        }


        static void Main(string[] args)
        {
            int x = 4;
            Print(x); // boxing (int=>object)
            double y = 3.2;
            Print(y); // boxing (double=>object)
            char z = ‘n’;
           
Print(z); // boxing (char=>object)


            double e = 2.718281828459045;
            object o1 = e; // boxing (double=>object)
            object o2 = e; // boxing (double=>object)
            Console.WriteLine
(o1 == o2); // False (o1과 o2는 서로 다른 메모리에 데이타 복사본 저장)


            Point p3 = new Point(1, 1);
            Print(p3); // boxing (struct=>object)
            object o3 = p3; // boxing (struct=>object)
            p3.x = 2;
            Console.WriteLine(((Point)o3).x);
// unboxing(object=>struct) o3.x=1 (o3는 박싱된 복사본 p3에의해 데이터 안바뀜)


            Point2 p4 = new Point2(1, 1);
            Print(p4); // boxing 아님
            object o4 = p4; // boxing 아님
            p4.x = 2;
            Console.WriteLine(((Point2)o4).x); // downcasting(object=>Point2 class) o4.x=2 (class는 reference type이므로 o4는 p4에의해 데이터가 바뀜)
        }
    }

C# Formatting Numeric String

Formatting Standard Numeric Format Strings
http://msdn.microsoft.com/en-us/library/s8s7t687(VS.80).aspx

Formatting Custom Numeric Format Strings
http://msdn.microsoft.com/en-us/library/0c899ak8.aspx

Formatting Numeric Format Strings (Alignment)
Integer    http://www.csharp-examples.net/string-format-int/
Double    http://www.csharp-examples.net/string-format-double/
DateTime http://www.csharp-examples.net/string-format-datetime/
Align String with Spaces  http://www.csharp-examples.net/align-string-with-spaces/
Indent String with Spaces http://www.csharp-examples.net/indent-string-with-spaces/
IFormatProvider               http://www.csharp-examples.net/iformatprovider-numbers/
Custom IFormatProvider   http://www.csharp-examples.net/custom-iformatprovider/

























































Character Description Examples Output
C or c Currency Console.Write(“{0:C}”, 2.5); $2.50
Console.Write(“{0:C}”, -2.5); ($2.50)
D or d Decimal Console.Write(“{0:D5}”, 25); 25
E or e Scientific Console.Write(“{0:E}”, 250000); 2.50E+05
F or f Fixed-point Console.Write(“{0:F2}”, 25); 25
Console.Write(“{0:F0}”, 25); 25
G or g General Console.Write(“{0:G}”, 2.5); 2.5
N or n Number Console.Write(“{0:N}”, 2500000); 2,500,000.00
X or x Hexadecimal Console.Write(“{0:X}”, 250); FA
Console.Write(“{0:X}”, 0xffff); FFFF

 

int => string vs string => int

// integer => string type conversion
int i = 10;                    // 10
string j = i.ToString(); // “10”



// string => integer type conversion
string x = “123”;          // “123”
int y = Convert.ToInt32(x); // 123 (integer로 변환이 가능한 경우만 변환 가능 그 외엔 run-time exception error)
int z = Int32.Parse(x); // 123 (integer로 변환이 가능한 경우만 변환 가능 그 외엔 run-time exception error)
int w;
bool success = Int32.TryParse(x, out w); // 123 (integer로 변환이 가능한 경우만 변환 가능 그 외엔 w=0)

C# Struct

C++에서는 struct와 class간에 차이가 거의 없으며, 차이점은 아무런 명시를 하지 않았을 때 class는 멤버가 private 권한을 가지고, struct는 멤버가 public 권한을 가진다.

C#에서는 struct와 class가 유사하나 매우 다른 특징을 가진다.
-C# struct는 Value Type (값 형식)으로, 즉 stack영역에 데이터를 생성해서 사용함
-C# struct는 Default Constructor (기본생성자)나 Destructor(소멸자)선언할 수 없음
-C# struct는 다른 struct/class를 상속받을 수 없으며 파생시킬수도 없음 (따라서, protected는 선언할 수 없음)
-C# struct는 interface를 구현할 수 있음
-C# struct는 nullable type으로 사용할 수 있음
-C# struct는 일반적으로 new를 사용해서 객체를 생성하나 (예: Person p = new Person();), stack영역에 데이터를 생성해서 사용함

public struct Point
{
int x = 1; //Illegal: cannot initialize field
int y;

public Point() { } //Illegal: cannot have parameterless constructor
public Point(int x) { this.x = x; } //Illegal: must assign field y
}


http://www.codeproject.com/Articles/8612/Structs-in-C