336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

C# 코드 파일은 C 계열 언어와 달리 .cs 파일 하나에 코드를 구현한다. 구현에 있어 클래스가 길어질 수 있는데(클래스가 장대하게 길어지면 그것도 디자인을 잘못한듯) #region-#endregion을 이용하여 코드를 문서화 할 수 있다. 딱 여기까지는 익히 아는건데 도데체 어떻게 써야 잘 썼다고 말할까?! 고민하다 Open Source 인 log4net 은 어떻게 사용하나 살펴보았다.

정답은 없지만 그래도 Open Source 의 코드는 경험 많은 개발자들의 코드이므로 도움이 될 것 같다.


보통 클래스 내 멤버의 접근 지정자에 따라 분류한다.



1. public, protected, private 등 접근 지정자 별로 분류

2. 같은 접근 지정자일 경우, 생성자, 프로퍼티, 필드 등 으로 분류

3. 가시성은 public 멤버를 제일 상단에 배치



또는 인터페이스의 구현, helper, static wrapper 와 같이 성격이 비슷한 것 끼리 묶을 수 도 있다.



#endregion 라인에 아무것도 써주지 않아도 되는데, #region-#endregion 부분이 길어질 경우 #endregion 만 써 놓으면 어떤 부분인지 찾아야 되는 번거러움이 있으므로 #endregion 옆에도 참고가 될 설명을 붙여준다.



인터페이스 구현 시 IDE가 #region 을 자동으로 추가해 준다. 구현하는 인터페이스 별로 분류하니 보기도 좋다.


출처 : http://blog.naver.com/PostView.nhn?blogId=eom913&logNo=159761311

Posted by 역시인생한방
,
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

.NET 프로그래밍을 하는 데에 있어 한가지 장점을 꼽으라면 전에 비해 상당히 쉬워진 멀티쓰레드 프로그래밍이라고   있다하지만 많은 개발자들이 놓치는 부분이 쓰레드에서 UI 접근하는 부분이다.

 

우선 윈도우즈 프로그래밍에서 UI부분이 어떻게 동작하는지 이해할 필요가 있다윈도우에서 UI 메시지 펌프 (Message Pump)라고 불리는 방법에 의해서 화면에 그려진다선하나를 화면에 그린다고 가정하면윈도우즈는  선을 계속해서 반복적으로 그림으로써 사용자에게 마치 선이 하나가 있는 것처럼 보이게 하는 것이다그리고 이를 위해  많은 메시지 인스트럭션이 보내진다.

 

예를 들어 폼의 이벤트를 살펴보면 OnPaint라는 이벤트를 발견할  있다 이벤트내에 int I = 0; 이라는 코드를 삽입하고 브레이크 포인트를 걸어 실행을 시켜보면 윈도우는 보이지 않고  브레이크 포인트가 계속 해서 걸리는 것을   있다사용자가 모르는 사이 .NET 프레임웍은 윈도우즈에 해당 UI 화면에 그리도록 명령을 끊임 없이 보내며  이벤트를 발생시키는 것이다.

 

여기서 한가지 중요한 부분이 있다. .NET 프레임웍은 윈도우즈에 메시지를 보내는 과정에서 이벤트를 발생 시킴으로써 개발자에게자신의 코드를 삽입할 기회를 부여한다는 것이다 모든 부분이 UI 접근하려는 쓰레드와 관련이 있다.

 

모든 프로그램은 기본적으로 하나의 쓰레드로 시작이 된다따라서 폼을 화면에 그리는 메시지와 이벤트들도  쓰레드 안에서 구동이 된다하지만 사용자가 시작한 쓰레드는  쓰레드와는 별개로 실행이 된다따라서  커스텀 쓰레드에서 UI 직접 접근을 하면적절한 마샬링 없이 다른 쓰레드를 침범하는 것이다 (Cross Thread). 다시 말해, UI 쓰레드가 열심히 화면에 폼을 그리고 있는데갑자기 다른 쓰레드가 와서  짓을 하고 가는 꼴이 되버리는 것이다.

 

이를 위해서 UI 컨트롤들은 Invoke, BeginInvoke 메서드와 InvokeRequired 속성을 지원한다. Invoke 메서드는 동기(Synchronous) 메서드이고 BeginInvoke 비동기 (Asynchronous) 메서드이다 메서드들은 컨트롤들이 생성된 쓰레드의 메시지 펌프에 커스텀 코드를 삽입하여  쓰레드에서 컨트롤를 업데이트할  있도록 한다. Win32에서 SendMessagePostMessage 생각하면 된다. InvokeRequired 속성은 Boolean 값을 반환하며 Invoke  InvokeRequired 메서드를 호출해야 하는지를 알려준다.

 

Invoke  BeginInvoke 메서드는 인자로서 delegate 형태를 받는다다음은 Invoke 메서드를 호출하는 방법중 하나이다.

 

this.Invoke(new MethodInvoker(UpdateMe));

void UpdateMe()

{

}

 

MethodInvoker 프레임웍에서 지원하는 delegate 클래스로 인자가 없는 메서드들을 호출   있도록 정의가 되어있다만약인자를 넘겨줄 필요가 있다면 delegate  따로 정의하여 사용하면 된다다음은 인자를 갖는 메서드를 호출할 때의 예이다.

 

Delegate void UpdateMeDelegate(string message);

this.Invoke(new UpdateMeDelegate(UpdateMe), “This is the message”);

toid UpdateMe(string message)

{

}

 

Invoke 메서드는 동기 메서드이기 때문에 바로 실행되어  시간이 걸리는 작업에는 적합하지 않다이런 경우는 비동기 메서드인BeginInvoke 사용하면 된다. BeginInvoke 메서드는 EndInvoke 메서드와 짝으로 구동이 된다. EndInvoke  비동기로 실행된작업을 완료하는 역할을 한다.

 

IAsyncResult ar = this.BeginInvoke(new MethodInvoker(UpdateMe));

 

 

this.EndInvoke(ar);

 

BeginInvoke 메서드에서 실행된 작업이 끝나면 EndInvoke 메서드를 호출하여 작업을 완료한다.


출처 : http://kworks.tistory.com/119

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

StringFormat 양수(+) / 음수(-) 표시  (0) 2015.02.05
#region #endregion  (0) 2015.02.05
데이터 타입의 종류와 범위  (0) 2015.02.04
연산자 우선순위  (0) 2015.02.04
C# String Formatting  (0) 2015.02.04
Posted by 역시인생한방
,
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.



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

StringFormat 양수(+) / 음수(-) 표시  (0) 2015.02.05
#region #endregion  (0) 2015.02.05
UI Thread Marshalling - Invoke, BeginInvoke  (0) 2015.02.04
연산자 우선순위  (0) 2015.02.04
C# String Formatting  (0) 2015.02.04
Posted by 역시인생한방
,
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

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

StringFormat 양수(+) / 음수(-) 표시  (0) 2015.02.05
#region #endregion  (0) 2015.02.05
UI Thread Marshalling - Invoke, BeginInvoke  (0) 2015.02.04
데이터 타입의 종류와 범위  (0) 2015.02.04
C# String Formatting  (0) 2015.02.04
Posted by 역시인생한방
,
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

C# String Formatting 

UPDATE: I show alternate ways to use string formats in WPF in this post:WPF String Formatting

This entry has been copied from SteveX (http://blog.stevex.net/index.php/string-formatting-in-csharp/) for my own easy reference.

The text inside the curly braces is {index[,alignment][:formatString]}. If alignment is positive, the text is right-aligned in a field the given number of spaces; if it’s negative, it’s left-aligned.

Strings

There really isn’t any formatting within a string, beyond it’s alignment. Alignment works for any argument being printed in a String.Format call.

SampleGenerates
String.Format(”->{1,10}<-”, “Hello”);-> Hello<-
String.Format(”->{1,-10}<-”, “Hello”);->Hello <-


Numbers

Basic number formatting specifiers: 

SpecifierTypeFormatOutput (Passed Double 1.42)Output (Passed Int -12400)
cCurrency{0:c}$1.42-$12,400
dDecimal (Whole number){0:d}System.FormatException-12400
eScientific{0:e}1.420000e+000-1.240000e+004
fFixed point{0:f}1.42-12400.00
gGeneral{0:g}1.42-12400
nNumber with commas for thousands{0:n}1.42-12,400
rRound trippable{0:r}1.42System.FormatException
xHexadecimal{0:x4}System.FormatExceptioncf90


Custom number formatting:

SpecifierTypeExampleOutput (Passed Double 1500.42)Note
0Zero placeholder{0:00.0000}1500.4200Pads with zeroes.
#Digit placeholder{0:(#).##}(1500).42
.Decimal point{0:0.0}1500.4
,Thousand separator{0:0,0}1,500Must be between two zeroes.
,.Number scaling{0:0,.}2Comma adjacent to Period scales by 1000.
%Percent{0:0%}150042%Multiplies by 100, adds % sign.
eExponent placeholder{0:00e+0}15e+2Many exponent formats available.


;
Group separator
see below

The group separator is especially useful for formatting currency values which require that negative values be enclosed in parentheses. This currency formatting example at the bottom of this document makes it obvious:

Dates

Note that date formatting is especially dependant on the system’s regional settings; the example strings here are from my local locale.

SpecifierTypeExample (Passed System.DateTime.Now)
dShort date10/12/2002
DLong dateDecember 10, 2002
tShort time10:11 PM
TLong time10:11:29 PM
fFull date & timeDecember 10, 2002 10:11 PM
FFull date & time (long)December 10, 2002 10:11:29 PM
gDefault date & time10/12/2002 10:11 PM
GDefault date & time (long)10/12/2002 10:11:29 PM
MMonth day patternDecember 10
rRFC1123 date stringTue, 10 Dec 2002 22:11:29 GMT
sSortable date string2002-12-10T22:11:29
uUniversal sortable, local time2002-12-10 22:13:50Z
UUniversal sortable, GMTDecember 11, 2002 3:13:50 AM
YYear month patternDecember, 2002


The ‘U’ specifier seems broken; that string certainly isn’t sortable.

Custom date formatting:

SpecifierTypeExampleExample Output
ddDay{0:dd}10
dddDay name{0:ddd}Tue
ddddFull day name{0:dddd}Tuesday
f, ff, …Second fractions{0:fff}932
gg, …Era{0:gg}A.D.
hh2 digit hour{0:hh}10
HH2 digit hour, 24hr format{0:HH}22
mmMinute 00-59{0:mm}38
MMMonth 01-12{0:MM}12
MMMMonth abbreviation{0:MMM}Dec
MMMMFull month name{0:MMMM}December
ssSeconds 00-59{0:ss}46
ttAM or PM{0:tt}PM
yyYear, 2 digits{0:yy}02
yyyyYear{0:yyyy}2002
zzTimezone offset, 2 digits{0:zz}-05
zzzFull timezone offset{0:zzz}-05:00
:Separator{0:hh:mm:ss}10:43:20
/Separator{0:dd/MM/yyyy}10/12/2002


Enumerations

SpecifierType
gDefault (Flag names if available, otherwise decimal)
fFlags always
dInteger always
xEight digit hex.


Some Useful Examples

String.Format(”{0:$#,##0.00;($#,##0.00);Zero}”, value);

This will output “$1,240.00? if passed 1243.50. It will output the same format but in parentheses if the number is negative, and will output the string “Zero” if the number is zero.

String.Format(”{0:(###) ###-####}”, 8005551212);

This will output “(800) 555-1212?.


출처 : http://mikestedman.blogspot.kr/2008/10/c-string-formatting.html

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

StringFormat 양수(+) / 음수(-) 표시  (0) 2015.02.05
#region #endregion  (0) 2015.02.05
UI Thread Marshalling - Invoke, BeginInvoke  (0) 2015.02.04
데이터 타입의 종류와 범위  (0) 2015.02.04
연산자 우선순위  (0) 2015.02.04
Posted by 역시인생한방
,