'C#'에 해당되는 글 23건

  1. 2010.06.17 C# Abstract Class
  2. 2010.04.29 C# 웹에서 파일 다운받기
  3. 2010.04.28 C# ListView Row Highlight
  4. 2010.04.26 C# HTTP Get 라이브러리
  5. 2010.04.08 C# CurrentTimeMills
  6. 2010.04.08 C# Variable Arguments (Varargs)
  7. 2010.04.06 ExecuteScalar를 이용한 Row Count 얻기
2010.06.17 17:46

C# Abstract Class

1. 추상 클래스(abstract class)란?
    - 서브 클래스의 구조(outline)만 제공하기 위한 목적을 가지고 있다.
    - 추상 클래스는 직접적으로 객체를 생성 할 수 없다.

2. 추상 클래스의 구조
    - 추상 클래스는 서브 클래스에서 정의해야 하는 추상 멤버(method, property)를 가져야 한다.
    - 추상 멤버는 시그니쳐(signature)만 가진다.

3. 추상 클래스 정의
    - 추상 클래스와 멤버는 abstract 키워드를 이용해 선언이 가능하다.

//Abstract Class와 Member 선언
//abstract Class 선언
public abstract class Talk
{
    //abstract method 선언
    public abstract void speak();
}


4. 추상 클래스 상속 및 구현
    - 추상 클래스의 구현은 상속 후 추상 멤버에 override 키워드를 이용해 구현이 가능하다.
//Abstract Class 구현
public class SayHello : Talk
{
    //Abstract Member 구현
    public override void speak()
    {
        Console.WriteLine("Hello!")
    }
}


[참조] Understanding C# Abstract Classes

Trackback 0 Comment 0
2010.04.29 18:14

C# 웹에서 파일 다운받기

C#에서 웹에 있는 파일을 다운 받는 방법은 두가지가 있다. 둘다 WebClient 객체를 사용하지만 하나는 파일 다운만, 다른 방법은 Stream을 이용해 처리가 가능한 방법이다.

여기서는 파일 다운로드 방법만 소개한다. 나머지 방법은 아래의 출처에서~

using System.Net;

class Program
{
    static void Main(string[] args)
    {
        try
        {
            WebClient client = new WebClient();

            client.DownloadFile("http://www.google.co.kr/index.html",
                        "c:\\index.html");
        }
        catch (Exception e)
        {
            System.Console.WriteLine(e.StackTrace);
        }
    }
}


[출처] Download And Upload A File Using C#
Trackback 0 Comment 0
2010.04.28 16:16

C# ListView Row Highlight

C#의 listview를 사용하다 보면 열을 선택하면 맨 앞의 컬럼만 highlight된다. 이는 listview의 FullRowSelect property를 true로 설정함으로써 해결 할 수 있다.

myListView.FullRowSelect = true;
Trackback 0 Comment 0
2010.04.26 10:20

C# HTTP Get 라이브러리

C#에서 웹 페이지의 Reqest를 요청하고 그 결과를 반환하는 클래스
public class HttpGet
{
    private HttpWebRequest request;
    private HttpWebResponse response;

    private string responseBody;
    private string escapedBody;
    private int statusCode;
    private double responseTime;

    public string ResponseBody { get { return responseBody; } }
    public string EscapedBody { get { return GetEscapedBody(); } }
    public int StatusCode { get { return statusCode; } }
    public double ResponseTime { get { return responseTime; } }
    public string Headers { get { return GetHeaders(); } }
    public string StatusLine { get { return GetStatusLine(); } }


    public void Request(string url)
    {
        Stopwatch timer = new Stopwatch();
        StringBuilder respBody = new StringBuilder();

        this.request = (HttpWebRequest)WebRequest.Create(url);

        try
        {
            timer.Start();
            this.response = (HttpWebResponse)this.request.GetResponse();
            byte[] buf = new byte[8192];
            Stream respStream = this.response.GetResponseStream();
            int count = 0;
            do
            {
                count = respStream.Read(buf, 0, buf.Length);
                if (count != 0)
                    respBody.Append(Encoding.ASCII.GetString(buf, 0, count));
            }
            while (count > 0);
            timer.Stop();

            this.responseBody = respBody.ToString();
            this.statusCode = (int)(HttpStatusCode)this.response.StatusCode;
            this.responseTime = timer.ElapsedMilliseconds / 1000.0;
        }
        catch (WebException ex)
        {
            this.response = (HttpWebResponse)ex.Response;
            this.responseBody = "No Server Response";
            this.escapedBody = "No Server Response";
            this.responseTime = 0.0;
        }
    }



    private string GetEscapedBody()
    {  // HTML escaped chars
        string escapedBody = responseBody;
        escapedBody = escapedBody.Replace("&", "&");
        escapedBody = escapedBody.Replace("<", "<");
        escapedBody = escapedBody.Replace(">", ">");
        escapedBody = escapedBody.Replace("'", "&apos;");
        escapedBody = escapedBody.Replace("\"", """);
        this.escapedBody = escapedBody;

        return escapedBody;
    }



    private string GetHeaders()
    {
        if (response == null)
            return "No Server Response";
        else
        {
            StringBuilder headers = new StringBuilder();
            for (int i = 0; i < this.response.Headers.Count; ++i)
                headers.Append(String.Format("{0}: {1}\n",
                    response.Headers.Keys[i], response.Headers[i]));

            return headers.ToString();
        }
    }



    private string GetStatusLine()
    {
        if (response == null)
            return "No Server Response";
        else
            return String.Format("HTTP/{0} {1} {2}", response.ProtocolVersion,
                (int)response.StatusCode, response.StatusDescription);
    }
}

사용법:
public class Program
{
    static void Main(string[] args)
    {
        HTTPGet req = new HTTPGet();
        req.Request("http://www.google.com");
        Console.WriteLine(req.StatusLine);
        Console.WriteLine(req.ResponseTime);
        Console.WriteLine(req.ResponseBody);
    }
}


[출처] C# .NET 2.0 HTTP GET Class
Trackback 0 Comment 0
2010.04.08 13:50

C# CurrentTimeMills

Java의 System.currentTimeMillis() 와 동일한 효과를 내는 C# code

public long CurrentTimeMillis()
{
    DateTime Epoch = new DateTime(1970, 1, 1);
    return (long)(DateTime.UtcNow - Epoch).TotalMilliseconds;
}


C#에서는 기준점이 0001-01-01이지만 Java에서는 1970-01-01이다.
또한 C#은 local date를 사용하지만 Java는 UTC date를 사용한다.

따라서 기준일을 1970 년 1월 1일로 설정하고 시간도 UTC로 얻어와 계산하면 된다.

[출처] Java System.currentTimeMillis() equivalent
Trackback 0 Comment 0
2010.04.08 09:55

C# Variable Arguments (Varargs)

Cause
A public or protected type contains a public or protected method that uses the VarArgs calling convention.

Rule Description
The VarArgs calling convention is used with certain method definitions that take a variable number of parameters. A method using the VarArgs calling convention is not Common Language Specification (CLS) compliant and might not be accessible across programming languages.

In C#, the VarArgs calling convention is used when a method's parameter list ends with the __arglist keyword. Visual Basic does not support the VarArgs calling convention, and Visual C++ allows its use only in unmanaged code that uses the ellipse ... notation.

How to Fix Violations
To fix a violation of this rule in C#, use the params (C# Reference) keyword instead of __arglist.

When to Exclude Warnings
Do not exclude a warning from this rule.

Example
The following example shows two methods, one that violates the rule and one that satisfies the rule.

using System;

namespace UsageLibrary
{
    public class UseParams 
    {
        // This method violates the rule.
        [CLSCompliant(false)]
        public void VariableArguments(__arglist) 
        { 
            ArgIterator argumentIterator = new ArgIterator(__arglist);
            for(int i = 0; i < argumentIterator.GetRemainingCount(); i++) 
            { 
                Console.WriteLine(
                    __refvalue(argumentIterator.GetNextArg(), string));
            } 
        }

        // This method satisfies the rule.
        public void VariableArguments(params string[] wordList)
        { 
            for(int i = 0; i < wordList.Length; i++) 
            { 
                Console.WriteLine(wordList[i]);
            } 
        }
    }
}


[출처] Use params for variable arguments

Trackback 0 Comment 0
2010.04.06 13:31

ExecuteScalar를 이용한 Row Count 얻기

ExecuteScalar를 이용하면 SqlDataReader를 이용하지 않고도 Row Count를 얻을 수 있다.

일반적인 사용 방법은

int rowCount = SELECT Count(column_name) FROM table_name


int rcds=0;

sqlcmd.CommandText="Select count(*) from my_table where recdid='Active'";
rcds = sqlcmd.ExecuteScalar();

if(rcds>0)
{
    sqlcmd.CommandText="Select Info1 from my_table where recdid='Active'";
    myrdr = sqlcmd.ExecuteDataReader();
    while(myrdr.Read())
    {
        //Reads and process records
    }
}
else
{
    errmsg = "No Records Found.";
}

Trackback 0 Comment 0