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에의해 데이터가 바뀜)
        }
    }

Console Class

http://msdn.microsoft.com/en-us/library/system.console.aspx

Console 클래스에는 ReadLine, WriteLine 같은 기본적인 입출력 메서드 외에도 콘솔 관리를 위한 여러 가지 멤버들이 제공된다. 어떤 멤버는 함수처럼 필요할 때 호출할 수 있는 메서드이고 어떤 것은 값을 읽고 쓰는 프로퍼티 형태로 되어 있다.

































멤버


설명


Title


콘솔창의 제목 문자열이다.


BackgroundColor, ForegroundColor


전경색, 배경색의 색상이다.


CursorSize


커서의 높이를 지정한다.


CursorVisible


커서의 보임/숨김을 지정한다.


CursorLeft, CursorTop


커서의 현재 위치이다.


Clear()


화면을 지운다.


Beep()


소리를 낸다.


ResetColor()


디폴트 색상으로 변경한다.


SetCursorPosition(x,y)


커서의 위치를 옮긴다.



class Program
{
  public static void Main()
  {
    Console.Title = “콘솔 테스트”; // 콘솔창의 제목
    Console.BackgroundColor = ConsoleColor.Yellow; // 콘솔창의 배경색
    Console.ForegroundColor = ConsoleColor.Blue; // 콘솔창의 전경색
    Console.Clear(); // 콘솔창 화면을 깨끗이 지움
    Console.Beep(); // 콘솔창에 삑소리를 냄
    Console.WriteLine(“색상을 변경했습니다.”); // 콘솔창에 “색상을 변경했습니다.” 출력
    Console.ReadKey(); // 콘솔창에서 아무키나 입력받길 대기
    Console.ResetColor(); // 콘솔창에서 색상(배경,전경)을 초기화
    Console.SetCursorPosition(10, 10); // (10, 10) 좌표로 커서를 이동
    Console.WriteLine(“디폴트 색상입니다.”); // 콘솔창에 “디폴트 색상입니다.” 출력
    Console.ReadKey(); // 콘솔창에서 아무키나 입력받길 대기
  }
}

체감온도산출식

// 체감온도(℃) = 13.12 + 0.6215ⅹT – 11.37 V0.16 +0.3965 V0.16 ⅹT
// [ T : 기온, V : 풍속(km/h) ]    
public double GetWindChillTemperature(double T, double V)
{
       return (13.12 + 0.6215 * T – 11.37 * Math.Pow(V, 0.16) + 0.3965 * Math.Pow(V, 0.16) * T);
}

체감온도


  • 체감온도는 외부에 있는 사람이나 동물이 바람과 한기에 노출된 피부로부터 열을 빼앗길 때 느끼는 추운 정도를 나타내는 지수임
  • 바람이 강해질수록 피부의 열 손실률은 높아지게 되며 결국 내부체온을 떨어뜨리게 됨. 예를 들어 영하 10℃에서 풍속이 5km/h일 때 체감온도는 영하 13℃이지만 풍속이 30km/h가 되면 체감온도가 영하 20℃까지 떨어져 강한 추위를 느끼게 됨

산출방법



수식


* 현재 사용하고 있는 체감온도 산출식은 2001년 8월 캐나다 토론토에서 열린 Joint Action Group for Temperature Indices (JAG/TI) 회의에서 발표된 것으로 미국과 캐나다 등 북아메리카 국가들을 중심으로 최근에 가장 널리 사용되고 있음


단계별 설명및 주의사항


























단계 지수범위 설명 및 주의사항
위험 -45 미만

노출된 피부는 몇분내에 얼게 되고, 야외 활동시 저체온 위험이 매우 크므로 방풍·보온기능이 있는 매우 따뜻한 겹옷을 착용해야 함. 또한 노출된 모든 피부를 덮고 모자, 벙어리장갑, 스카프, 목도리, 마스크의 착용이 필요함. 야외환경은 생명에 매우 위험하므로 야외활동은 가급적 짧게 하거나 취소하여 실내에 머무를 수 있도록 할 것.

경고 -45~-25 미만 10~15분이내 동상 위험이 있고, 보호장구 없이 장기간 노출시 저체온에 빠질 위험이 크므로 방풍기능이 있는 겹옷이나 따뜻한 겹옷을 착용해야함. 또한 노출된 모든 피부를 덮고 모자, 벙어리장갑, 스카프, 목도리, 마스크의 착용이 필요함. 피부가 바람에 직접 노출되지 않도록 할 것
주의 -25~-10 미만 노출된 피부에 매우 찬 기운이 느껴지고, 보호장구 없이 장기간 노출시 저체온에 빠질 위험이 있으므로 방풍기능이 있는 겹옷이나 따뜻한 옷을 착용해야함. 또한 모자, 벙어리장갑, 스카프의 착용이 필요함
관심 -10 이상 추위를 느끼는 정도가 증가함. 긴 옷이나 따뜻한 옷의 착용이 필요함

 

HW1

연습문제 (1)





단원 : C# 기초


목표 : C# 프로그램 기초


주요 연습 내용 : Visual Studio 2010, C# 입출력, 변수, 메소드, 제어문 사용 연습


준비자료 : WindChillTemperatureCalculator.cs


기상청 체감온도산출법  http://www.kma.go.kr/HELP/basic/help_01_07.jsp


연습문제 Ex1 (Due by 9/27 24시까지)


-cyber 강의실 (cyber.dku.edu)source code, executable file, solution/project VC# file, 보고서를 학번_이름_Ex1.zip으로 묶어서 낼 것. 보고서 (30%)


 


[연습문제]


0. Visual C# Console Application의 프로젝트를 생성한다.


1. 체감온도계산기 WindChillTemperatureCalculator 클래스를 작성하라. (30%)


enum WindChillTemperatureIndex { DANGER, WARNING, CAUTION, AWARE };


– void GetKeyboardInput() 콘솔창에서 키보드로 기온, 풍속을 입력받아서 처리


+ 힌트: while 문을 사용하여 사용자가 잘못 입력했을 경우 다시 입력 가능하도록 함


+ 힌트: Console.ReadLine() string을 반환하므로, double로 변환하기 위하여


TryParse 함수 사용 => boolValue = double.TryParse(string, out doubleValue)


– void PrintWindChillTemperature() 체감온도와 체감온도지수를 화면에 출력


double GetWindChillTemperature(double T, double V) 체감온도 값을 반환


WindChillTemperatureIndex GetWindChillTemperatureIndex(double T) 체감온도 지수를 반환


ConsoleColor GetWindChillTemperatureIndexColor(WindChillTemperatureIndex index) 체감온도지수 경보색을 반환


2. WindChillTemperatureCalculator 클래스에 PrintWindChillTemperatureIndexTable() 메소드를 추가하라. (20%)


체감온도 산출표를 출력함 (테이블의 형식으로 색깔까지 맞춰서)


3. Main 함수에서는 WindChillTemperatureCalculator 객체를 생성하고 체감온도 산출표와 사용자 입력을 받아서 체감온도를 출력하거나 등 routine을 추가한다. (20%)


– do..while 문을 사용하여 계속해서 다른 계산을 할 수 있도록 함


그리고, 본인이 더 테스트해보고 싶은 메소드나 루틴을 추가함

사용자 삽입 이미지

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