GSI

delegate (위임) 사용법

C# 2007. 10. 19. 13:49 |

Delegate 사용법

C#은 C언어에는 없는 위임이라는 독특한 특징을 도입했다. 기본적으로 위임이란, 같은 인터페이스를 만족시키는 한, 어느 클래스로부터 홨는지알지 못하더라도 넘겨주고 사용할 수 있는 다른 클래스에 있는 함수의 참조이다.

사용자 삽입 이미지

심플 예제

위의 화면에서 보는것과 같이 위쪽에 TextBox에 입력한 문자열을 Process를 누르게 되면
대문자 또는 소문자를 자동으로 만들어 주는 기능을 한다.
이때 Capital, Lower를 체크 해주게 되는데
내부적인 코드는 아래와 같다.

namespace WindowsFormsApplication4
{
    public partial class Form1 : Form
    {
        private delegate string fTxDelegate(string s);
        fTxDelegate ftx;

        public Form1()
        {
            InitializeComponent();
        }

        private void radioButton1_CheckedChanged(object sender, EventArgs e)
        {
            button1.Enabled = true;

            ftx = new fTxDelegate(new Capital().fixText);
        }

        private void radioButton2_CheckedChanged(object sender, EventArgs e)
        {
            button1.Enabled = true;

            ftx = new fTxDelegate(new Lower().fixText);
        }

        private void button1_Click(object sender, EventArgs e)
        {
            listBox1.Items.Add(ftx(textBox1.Text));
        }
    }

    public class Capital
   {
        public string fixText(string s) {
            return s.ToUpper();
        }
    }

    public class Lower
   {
        public string fixText(string s) {
            return s.ToLower();
        }
    }
}

fix 메서드는 어떤 fixText를 호출할지를 자동으로 결정해 준다.

Posted by gsi
:

IT 도서관

Etc 2007. 10. 17. 23:06 |

각종 알고리즘 및 번역 자료등
많은 공부할 자료가 잘 정리 되어 있는 곳이네요.

http://www.galexandria.com/doc/index.php/%EB%8C%80%EB%AC%B8
Posted by gsi
:

Asp.NET 에 있는 GridView는 기본적인 기능만으로도 활용도가 정말 좋은거 같다.
가장 좋은건 페이지 기능이 제일 맘에 드는거 같다.

업데이트, 삭제 등도 바로 지원하면서
디테일 뷰와 연동하면 기본적인 DB 제어가 가능해 진다.

하지만 기본적인 레이아웃으로만 사용해서 부족한 부분에서는 아래와 같이
TemplateField를 사용하게 되면 더 다양한 뷰를 생성할 수 있다.

아래는 GridView의 한 부분이다.

    <asp:GridView ID="GridView1" runat="server" AllowPaging="True"
        AutoGenerateColumns="False" CssClass="gridview"
        DataSourceID="SqlDataSource1" PageSize="6">
        <Columns>
            <asp:TemplateField HeaderText="선택">
                <ItemTemplate>
                    <asp:CheckBox ID="CheckBox1" runat="server" Text='<%# Eval("Item_name") %>' />
                </ItemTemplate>
            </asp:TemplateField>
            <asp:templatefield HeaderText="아이콘">
                <itemtemplate>
                    <asp:Image ID="Image1" runat="server" ImageUrl='<%# Eval("view_img", "~\\Images\\object_icon_obj\\wi_{0}.png") %>' />                   
                    <!--<asp:Label ID="item_name1" runat=server Text='<%# Eval("Item_name") %>'  />-->
                    <asp:Label ID="uid1" runat=server Text='<%# Eval("uid") %>'  />
                </itemtemplate>
            </asp:templatefield>
        </Columns>
    </asp:GridView>

<asp:templatefield> 이걸로 묶어 주고
내부에 label, image 등등을 넣어서 레이아웃을 구성해 준다.

image 같은 경우에 url을 구성할 경우 format 정보가 필요할때가 있다.
Eval()함수를 사용해서 할때 2번째 인자 값을 사용하면 확장을 할 수가 있다.
Posted by gsi
:

사용자 삽입 이미지

DB를 생성한 후에 GridView 등에서 사용할때 위와 같이 막혀 있는 경우가 종종 있다.
나만 그런가 하고 DB를 수없이 바꿔 보고 해봤지만.
결국은 다른데 문제가 있었다.

1. DB를 생성한 후에 기본키 생성이 안되어 있을때.
2. Configure Data Source 창에서 기본키가 Select 되지 않았을때.

이럴 경우 위와 같이 화면이 나오게 된다.
Posted by gsi
:

C# 기초 - 배열

C# 2007. 10. 15. 16:47 |

배열
정수형 배열은 아래와 같이 선언
int [] array;

배열 선언시 몇개의 요소를 가질것인지 선언해야 한다.
5개의 값을 갖는 배열을 선언
int [] array = new int[5];
array[0] = 100;
int value = array[0];

배열의 크기는 array.Length로 구할 수 있습니다.
반복문을 사용할 때 유용합니다.
for(int i = 0; i < array.Length; i++) {
   array[i] = i * 100;
   ...
}

배열 초기화
int [] array = { 1, 2, 3, 4, 5 };

int [] array;
array = new int [] { 1, 2, 3, 4, 5 };
array = { 1, 2, 3, 4, 5 }; //이렇게는 사용할 수 없습니다.

string [] sarray = { "first", "second", "third" };

//값을 나중에 초기화한 경우
string [] sarray;
sarray = new string [] { "first", "srcond", "third" };

Array 객체
C# 언어에서 배열은 고유한 데이터형입니다. Array 객체는 배열에서 사용할 수 있는 다양한 메시드와 멤버를 제공합니다.

int value = Array.Length; //배열의 길이를 리턴합니다.
Array.Sort( arr ); // 배열에 있는 요소 값을 정렬합니다.
Array.Reverse( arra ); //배열에 요소 값을 거꾸로 배치합니다.
int index = Array.IndexOf( arr, Value ); //배열의 처음부터 값을 찾기 시작해서 맨 처음 찾은 값의 위치를 알려 줍니다.
int index = Array.LastIndexOf( arr, value ); //배열의 끝에서 부터 거꾸로 찾아서 위치를 알려 줍니다.
int index = Array.BinarySearch( arr, value ); //배열에서 Binary search를 수행합니다.

foreach 문
for문을 이용해서 배열 값을 보일수도 있고, foreach 문을 이용할 수도 있습니다. foreach문은 배열의 처음부터 순서대로 값을 보여줍니다. 인덱스 값을 따로 지정할 필요가 없습니다.
foreach ( string str in arr )
{
   Response.Write (str );
}

다차원 배열

int [,] array; // 2차원 배열 선언
array = new int [3, 3];
int [,,] array; // 3차원 배열 선언

array [1, 2] = 100; //2행 3렬에 값 넣기

다차원 배열 초기화
배열을 선언하면서 바로 요소 값을 초기화할 수도 있습니다. 값을 정의하는 각 열마다 {,}를 이용해서 구분해 줍니다. 다음 두 문장은 같은 배열을 선언하는 코드입니다. new int [,]은 마찬가지로 생략할 수 있습니다.

int [,] array = new int [,] { {1, 2, 3}, {4, 5, 6} };
int [,] array = { {1, 2, 3}, {4, 5, 6} };


Posted by gsi
: