'.NET/C#'에 해당되는 글 14건

  1. 2010.04.25 윈폼-리스트뷰에서 간단히 사용하기
  2. 2010.04.04 윈도우 서비스 만들기
  3. 2010.04.03 ReadLine, Read, ReadKey
  4. 2010.03.31 어셈블리 동적 로딩
  5. 2010.03.29 Const Vs Readonly
  6. 2010.03.29 Sealed
  7. 2010.03.28 Sort메소드
  8. 2010.03.27 Delegate-2
  9. 2010.03.27 직렬화
  10. 2010.03.25 AS, IS

           
             리스트뷰에 먼저 헤더를 삽입한다.
            처음에 "" 이렇게 빈 헤더를 넣었는데 이유는 모르겠으나 subitem을 넣을때 
            자꾸 첫번재 열 다음부터 값이들어가서 임의대로 ""로 해놓고 길이도 1로해놨다.
            이상하게 2번째 열부터 값이들어간다.

            listView1.Columns.Add("", 1, HorizontalAlignment.Left);
            listView1.Columns.Add("싱크시작", 100, HorizontalAlignment.Left);
            listView1.Columns.Add("싱크종료", 100, HorizontalAlignment.Left);
            listView1.Columns.Add("자막내용", 200, HorizontalAlignment.Left);

            listView1.View = View.Details;

            listView1.FullRowSelect = true;
            listView1.GridLines = true;


다음에 실제 값들을 넣는다.
            ListViewItem item;

            item.SubItems.Add(temp);
           
            item.SubItems.Add(temp2);

            item.SubItems.Add(temp3);                
                   
            listView1.Items.AddRange(new ListViewItem[] { item});

이렇게 값이들어간다.




마지막으로 값을 가져오고싶을때는 아래와같이 가져 올수 있다.

string name = listView1.Items[0].SubItems[1].Text;


'.NET > C#' 카테고리의 다른 글

윈도우 서비스 만들기  (0) 2010.04.04
ReadLine, Read, ReadKey  (0) 2010.04.03
어셈블리 동적 로딩  (0) 2010.03.31
Const Vs Readonly  (0) 2010.03.29
Sealed  (0) 2010.03.29
Posted by 아몰라

'.NET > C#' 카테고리의 다른 글

윈폼-리스트뷰에서 간단히 사용하기  (0) 2010.04.25
ReadLine, Read, ReadKey  (0) 2010.04.03
어셈블리 동적 로딩  (0) 2010.03.31
Const Vs Readonly  (0) 2010.03.29
Sealed  (0) 2010.03.29
Posted by 아몰라
2010. 4. 3. 10:46

Console.ReadKey();

ReadKey
메서드는 문자 또는 기능 키를 누를 때까지 ReadKey 메서드를 발행하여 스레드에서 차단되거나 대기 상태로 있습니다. 문자 또는 기능 키는 하나 이상의 Alt, Ctrl 또는 Shift 보조키와 함께 누를 수 있습니다. 그러나 보조키만 누르면 ReadKey 메서드가 반환되지 않습니다.


Console.Read();

입력받은 문자의 아스키 코드값을 리턴하는 메서드이다.
Read 메서드는 입력 문자를 입력할 때 해당 반환을 차단하고 Enter 키를 누르면 종료됩니다. Enter 키를 누르면 입력한 내용에 플랫폼 종속 줄 종결 시퀀스가 추가됩니다. 예를 들어, Windows의 경우 캐리지 리턴-줄 바꿈 시퀀스가 추가됩니다. 다음에 Read 메서드를 호출하면 입력한 내용을 한 번에 한 문자씩 검색합니다. 마지막 문자를 검색하면 Read가 반환 값을 다시 차단하고 주기가 반복됩니다.




Console.ReadLine();
다음 줄의 문자를 읽는 메소드

  예외
예외 상황
IOException

I/O 오류가 발생하는 경우

OutOfMemoryException

반환된 문자열을 위한 버퍼를 할당할 메모리가 부족한 경우

ArgumentOutOfRangeException

다음 줄의 문자 수가 Int32..::.MaxValue보다 큰 경우



이 메서드에서 OutOfMemoryException을 throw하는 경우 내부 Stream의 reader 위치가 메서드에서 읽지 못한 문자 수만큼 올라가지만, 이미 읽은 내부 ReadLine 버퍼의 문자는 삭제됩니다. 스트림의 reader 위치는 변경할 수 없으므로 이미 읽은 문자는 복구할 수 없고 TextReader를 다시 초기화하는 경우에만 액세스할 수 있습니다. 스트림 내부의 처음 위치를 알 수 없거나 해당 스트림이 검색을 지원하지 않는 경우에도 내부 Stream을 다시 초기화해야 합니다.

스트림을 다시 초기화하지 않고 견고한 코드를 생성하려면 Read 메서드를 사용하여 읽은 문자를 미리 할당된 버퍼에 저장해야 합니다.



공부를 한번 해봤는데

Stream에 대해서 잘 이해하지 못하여서 완벽하게 이해하지못한것같다.

다음에 좀더 내공을 쌓고 다시 한번 봐야될것같다~ -_-

'.NET > C#' 카테고리의 다른 글

윈폼-리스트뷰에서 간단히 사용하기  (0) 2010.04.25
윈도우 서비스 만들기  (0) 2010.04.04
어셈블리 동적 로딩  (0) 2010.03.31
Const Vs Readonly  (0) 2010.03.29
Sealed  (0) 2010.03.29
Posted by 아몰라
2010. 3. 31. 10:45
리플렉션을 어설프게 이해해서 제대로 정리하지는못했다 -_-
다음에 더 정리가되면 다시 2탄을 올리도록하겠다.

1.
네임스페이스 리플렉션 ( System.Reflection ) 에 있는  Assembly 클래스를 이용한다.
 Assembly asm = Assembly.Load("SB");  SB.dll 파일을 로딩한다.

2.
해당 파일에 있는 네임스페이스명.클래스명을 불러온다.
Type type = asm.GetType("asem.SB");


아래와 같이해서 가져올 네임스페이스명과 클래스명을 알 수 있다.
foreach(Type i in asm.GetType())
{
Console.WriteLine(i.FullName)  
}

방법1

해당 클래스에서 프로퍼티를 가져온다.
해당 프로퍼티에서는 get으로 객체를 반환해준다.
GetValue를 통해 PropertyInfo에 있는 가져온 프로퍼티 값을 object에 넣어준다.

            PropertyInfo pi = type.GetProperty("sb");  
            object o = pi.GetValue(null, null); //첫번째 : obecjt  두번째 : 가져올 object의 인덱스
                                                           
이렇게 해서 해당 객체를 실행시킬 수 있다.

방법2

object obj = Activator.CreateInstance(stu, "진용", cnt++);  //해당겍체를 가져온다.
            MethodInfo mi =  stu.GetMethod("Study");          //클래스의 Study 메소드를 가져온다.
            mi.Invoke(obj, null);                                        //가져온 해당 객체를 실행시킨다.

'.NET > C#' 카테고리의 다른 글

윈도우 서비스 만들기  (0) 2010.04.04
ReadLine, Read, ReadKey  (0) 2010.04.03
Const Vs Readonly  (0) 2010.03.29
Sealed  (0) 2010.03.29
Sort메소드  (0) 2010.03.28
Posted by 아몰라
2010. 3. 29. 18:35

const vs readonly
readonly 키워드는 const 키워드와 다릅니다. const 필드는 필드를 선언할 때만 초기화될 수 있습니다. readonly 필드는 필드를 선언할 때 또는 생성자에서 초기화될 수 있습니다. 따라서 readonly 필드의 값은 사용된 생성자에 따라 다릅니다. 또한 const 필드는 컴파일 타임 상수인 반면 readonly 필드는 다음 예제에서와 같이 런타임 상수로도 사용할 수 있습니다.
출처 : msdn.microsoft.com

컴파일 타임 상수 vs 런타임 상수

컴 파일 타임 상수는 코드가 컴파일될 때 계산되고 런타임 상수는 응용 프로그램이 실행되는 동안에만 계산됩니다. 컴파일 타임 상수는응용 프로그램 실행에 관계없이 항상 같은 값을 갖지만 런타임 상수는 매번 변경될 수 있습니다. 컴파일 타임 상수는 배열 범위,case 식 또는 열거자 이니셜라이저 등의 경우에 필요합니다.

출처 : msdn.microsoft.com

컴파일타임 상수는 런타임 상수에 비해 다소 빠르지만 유연성이 떨어진다. 컴파일 타임 상수는수행성능이 매우 중요하고 상수값이 절대로 바뀌지 않는 경우에 한해서만사용하는 것이 좋다.

컴 파일 타임 상수는 단지 내장자료형(정수형, 실수형) 이나 enum, string 에 대해서만 사용될수 있다. 이는 내장 자료형만이 유일하게 변수의 초기화 단계에서의 의미를 가지고 문자 자체로 표현되는 값(literal value)을 대체할 수 있기 때문이다.
출처 : Effective C#
 
장단점

readonly 대신 const 를 썼을 때의 유일한 장점은 수행성능이다. 이미 알려진 상수값에 직접 접근하는 효율이 readonly로 지정된 변수의 값을 참조하는 것에 비해서 조금 더 빠르다.그렇지만 이를 통해 얻을수 있는 수행성능의 개선효과가 작고 무엇보다 유연성을 감소시키는 단점이 있다. 유연성을 포기하기 이전에 수행성능에 미치는 영향을 먼저 명확하게 하자.
출처 : Effective C#

즉 const 로 선언한것은 변경을 하더라도 전체 컴파일 전까지는 반영된 내용이 적용되지 않습니다. 즉 const 로 선언한것을 수정할 경우는 재컴파일 하지 않고 배포한다면 원하는 결과는 나오지 않기 때문에 변경에 빈도가 있는 것은 const 를 사용하지 않는것이 좋습니다. 

역시 코드를 보는게 이해하기 쉽겠죠 ?? 밑에 내용은 msdn 에 있는 샘플 코드 입니다.







C# 언어 사양
10.4.2.2 상수 및 정적 읽기 전용 필드의 버전 관리

상 수와 읽기 전용 필드의 이진 버전 관리 의미는 다릅니다. 식에서 상수를 참조할 경우 컴파일 타임에 상수 값을 가져오지만, 식에서 읽기 전용 필드를 참조할 경우 런타임까지 필드 값을 가져오지 않습니다. 별개의 두 프로그램으로 구성된 응용 프로그램을 살펴보겠습니다.


using System;
namespace Program1
{
   public class Utils
   {
      public static readonly int X = 1;
   }
}
namespace Program2
{
   class Test
   {
      static void Main() {
         Console.WriteLine(Program1.Utils.X);
      }
   }
}

Program1Program2 네임스페이스는 별도로 컴파일된 두 프로그램을 나타냅니다. Program1.Utils.X를 정적 읽기 전용 필드로 선언했기 때문에 Console.WriteLine 문에서 출력하는 값을 컴파일 타임에 알 수 없으며, 런타임에 해당 값을 가져옵니다. 따라서 X 값이 변경되고 Program1이 다시 컴파일되면 Program2가 다시 컴파일되지 않더라도 Console.WriteLine 문이 새 값을 출력합니다. 그러나 X가 상수였기 때문에 Program2를 컴파일 할 때 X 값을 가져오며, Program2를 다시 컴파일할 때까지 Program1의 변경으로 인해 영향을 받지 않습니다.

출처 : msdn.microsoft.com
즉 program1 에 x 를 2로 변경후 Program1 만 컴파일 한다면 Program2 에서 찍어보는값은 변경이 적용된 값입니다. 
여기서 program1 에 x 값은 2로 변경한 값을 유지하고 Program3 을 추가하고 Program2 다음과 같이 변경했다고 가정해봅시다.
 
namespace Program3
{
   public class Utils
   {
      public const int X = 1;
   }
}

namespace Program2
{
   class Test
   {
      static void Main() {
         Console.WriteLine(Program1.Utils.X);
         Console.WriteLine(Program3.Utils.X);

      }
   }
}
이 코드에 결과는 2,1 입니다. 두번째 Program3.Utils.X 값을 2로 변경하고 Program1 과 Program3를 컴파일해서 돌린다면 결과는 2,1 입니다. Program2 를 컴파일 하기 전까지 const 값은 변경된 내용이 반영되지 않습니다.

'.NET > C#' 카테고리의 다른 글

ReadLine, Read, ReadKey  (0) 2010.04.03
어셈블리 동적 로딩  (0) 2010.03.31
Sealed  (0) 2010.03.29
Sort메소드  (0) 2010.03.28
Delegate-2  (0) 2010.03.27
Posted by 아몰라
2010. 3. 29. 15:37

using System;
using System.Collections.Generic;
using System.Text;

namespace ClassTest4
{
    class AB
    {
        public virtual void ABC()
        {
            Console.WriteLine("A-ABC");
        }
        public virtual void Display()
        {
            Console.WriteLine("A-Display");
        }
        public virtual void Output()
        {
            Console.WriteLine("A-Output");
        }
    }
    class A:AB {
        public sealed override void ABC() {
            Console.WriteLine("A-ABC");
        }
        public override void Display()
        {
            Console.WriteLine("A-Display");
        }
        public override void Output()
        {
            Console.WriteLine("A-Output");
        }
    }
    class B :A{
        /*    public override void ABC() {
                Console.WriteLine("B-ABC");
            } 위가 실드로 되어있어서 재정의 못함*/

        public override void Display() {
            Console.WriteLine("B-Display");
        }
    }

    class CTest
    {
        static void Main(string[] args)
        {
            A pA = new A();
            pA.ABC();pA.Display();pA.Output();
            pA = new B();
            pA.ABC();pA.Display();pA.Output();
        }
    }
}

n1. sealed 클래스
- sealed 클래스는 파생 클래스에서 사용할 없는 클래스 이다.
- sealed 클래스는 상속을 막는 클래스 이다.
- sealed 클래스는 보안 코드 설계 부분의 명확하게 하기 위해 사용
- sealed클래스는 상업적인 코드 내부구현이 복잡해 파생클래스에서
  오버라이드하면 문제가 발생할 가능성이 있는 코드를 사전에 차단할 용도로 사용
n2. sealed 메서드
- sealed 메서드는 파생 클래스에서 오버라이드 없다.
- sealed 메서드는 꼭 override 앞에서만 사용할 수 있다.
- 하지만 sealed를 쓰면 상속을 줄 수 없으므로 후위 클래스에서 재정의 할 수 없다.



'.NET > C#' 카테고리의 다른 글

어셈블리 동적 로딩  (0) 2010.03.31
Const Vs Readonly  (0) 2010.03.29
Sort메소드  (0) 2010.03.28
Delegate-2  (0) 2010.03.27
직렬화  (0) 2010.03.27
Posted by 아몰라
2010. 3. 28. 20:10
Sort 메소드를 사용하기 위해서는 CompareTo 함수를 재정의 해주어야 한다.

순서는 아래와같다.

1. 배열을 만들고 ArrayList member;

2. 데이터들을 넣어주고 member.Add(a);

3.소트 함수를 호출한다. member.Sort();



해당 클래스에서 재정의를 해준다.

public int CompareTo(object obj)
            {
                Man m = obj as Man;
                if (m == null)
                {
                    throw new Exception("헐~");
                }
                return name.CompareTo(m.name);
            }

기본적으로 오름차순으로 정렬이된다.

위에는 이름순으로 정렬이된다.

'.NET > C#' 카테고리의 다른 글

Const Vs Readonly  (0) 2010.03.29
Sealed  (0) 2010.03.29
Delegate-2  (0) 2010.03.27
직렬화  (0) 2010.03.27
AS, IS  (0) 2010.03.25
Posted by 아몰라
2010. 3. 27. 10:18

동기 Delegate

1. 우선 Delegate 함수를 만들어준다.
예) delegate void DeleStu(); //여기서 인자를 넣어주면 나중에 Invoke를 호출할때 인자가 추가되서 들어간다.

2. Delegate 객체를 만들어준다.
예) DeleStu sDel = new DeleStu(s.Study);  //만들어주면서 안에 Delegate를 이용해 호출할 함수를 인자로 넣어준다.

3. Delegate를 실행한다.
예) sDel.Invoke();  //만약 처음에 생성해줄대 카운트를 인자로넣었다면! Invoke(3); 이렇게 하면 함수를 3번호출하게된다.


비동기 Delegate

1, 2 같다.

3. Delegate를 비동기로 실행한다.
예) TDel.BeginInvoke(EndTDel, TDel); //첫번째는 호출할 콜백함수 , 두번째는 비동기할 객체
//만약 1번에서 인자를 넣어 주었다면 EndTDel 앞에 인자가 더 생긴다.

TDel.BeginInvoke(3, EndTDel, TDel);  // 이렇게 호출된다면 Tdel를 호출하면 3번을 실행하게된다.

        void EndTDel(IAsyncResult iar) //인자로 비동기할 객체가 들어가는것같다.
        {
            DeleTeacher TDel = iar.AsyncState as DeleTeacher;
            if (TDel != null)
            TDel();
          
            TDel.EndInvoke(iar);
        }

'.NET > C#' 카테고리의 다른 글

Sealed  (0) 2010.03.29
Sort메소드  (0) 2010.03.28
직렬화  (0) 2010.03.27
AS, IS  (0) 2010.03.25
Catch(Exception)  (0) 2010.03.25
Posted by 아몰라
2010. 3. 27. 10:01

예제

    [Serializable]   //클래스위에 이것을 선언해줘야 한다. 파생된 클래스들도 함께~~
    public sealed class SB

직렬화
        public void Serialize()
        {           
            IFormatter formatter = new BinaryFormatter();

Stream streamWrite = new FileStream("MyFile.txt",FileMode.Create, FileAccess.Write, FileShare.None);             
            formatter.Serialize(streamWrite, member);   

            streamWrite.Close();
        }

역직렬화

        public void DeSerialize()
        {
          IFormatter formatter = new BinaryFormatter();

          Stream streamRead = new FileStream("MyFile.txt", FileMode.Open, FileAccess.Read, FileShare.None);
          member = (ArrayList)formatter.Deserialize(streamRead);

          streamRead.Close();
        }

'.NET > C#' 카테고리의 다른 글

Sort메소드  (0) 2010.03.28
Delegate-2  (0) 2010.03.27
AS, IS  (0) 2010.03.25
Catch(Exception)  (0) 2010.03.25
Delegate  (0) 2010.03.25
Posted by 아몰라
2010. 3. 25. 20:25

            is  - 형변환 가능 여부를 bool로 반환해준다. 형변환 가능하면 true를 반환해준다.
예제 

            if ((man is Teacher) || (man is TeacherStu))
            {
                return false;
            }

사람이 선생님 또는 공부하는선생님이면 false를 반환해준다.


예제  

    
     as - 형변환 가능 여부를 확인하고 가능하면 형변환 시켜준다. 형변환이 불가능하면 Null을 반환해준다.


                  Man a = mem as Man;

                if (a != null)
                {
                    if (a.Name == _name)
                        return cnt;
                }

'.NET > C#' 카테고리의 다른 글

Delegate-2  (0) 2010.03.27
직렬화  (0) 2010.03.27
Catch(Exception)  (0) 2010.03.25
Delegate  (0) 2010.03.25
Foreach문  (0) 2010.03.24
Posted by 아몰라
이전버튼 1 2 이전버튼