VB.NET2009.12.21 12:03

 VB.NET 과 C#은 문법이 상당히 비슷합니다.

어쩌면 컨버팅 툴도 그리 어렵지 않게 만들수 있을것 같네요 ^^;

VB.NET 이 편한부분, C#이 편한 부분이 있는데요, 앞으로 나오게될 2010에는 서로의 장점을 서로 수렴하는듯 합니다. 특히 VB.NET 에서 불편했던, 다이나믹 변수와, 속성... 그리고 C#에서 오퍼레이터 등이 이슈가 될듯 하네요..

한가지... VB.NET 과 C#을 왔다갔다 하면서 가장 자주 실수 하는 부분이 배열 선언입니다.
vb 의 경우 arrTemp(5)  라고 선언하면 0~5 까지 즉 6개의 공간이 생기는것이고,
C#의 경우 arrTemp[5] 라고 선언하면 0~4 까지 즉 5개의 공간이 생기는것입니다.

VB.NET

Program Structure

C#

Imports System

Namespace Hello
   Class HelloWorld
      Overloads Shared Sub Main(ByVal args() As String)
         Dim name As String = "VB.NET"

        
'See if an argument was passed from the command line
          If args.Length = 1 Then name = args(0)

          Console.WriteLine("Hello, " & name & "!")
      End Sub
   End Class
End Namespace

using System;

namespace Hello {
   public class HelloWorld {
      public static void Main(string[] args) {
         string name = "C#";

        
// See if an argument was passed from the command line
         if (args.Length == 1)
            name = args[0];

         Console.WriteLine("Hello, " + name + "!");
      }
   }
}

VB.NET

Comments

C#

' Single line only
REM Single line only
''' <summary>XML comments</summary>

// Single line
/* Multiple
    line  */
/// <summary>XML comments on single line</summary>
/** <summary>XML comments on multiple lines</summary> */

VB.NET

Data Types

C#

Value Types
Boolean
Byte, SByte
Char
Short, UShort, Integer, UInteger, Long, ULong
Single, Double
Decimal
Date

Reference Types
Object
String

Initializing
Dim correct As Boolean = True
Dim b As Byte = &H2A  
'hex
Dim o As Byte = &O52  
'octal
Dim person As Object = Nothing
Dim name As String = "Dwight"
Dim grade As Char = "B"c
Dim today As Date = #12/31/2007 12:15:00 PM#
Dim amount As Decimal = 35.99@
Dim gpa As Single = 2.9!
Dim pi As Double = 3.14159265
Dim lTotal As Long = 123456L
Dim sTotal As Short = 123S
Dim usTotal As UShort = 123US
Dim uiTotal As UInteger = 123UI
Dim ulTotal As ULong = 123UL

Type Information
Dim x As Integer
Console.WriteLine(x.GetType())         
' Prints System.Int32
Console.WriteLine(GetType(Integer))  
' Prints System.Int32
Console.WriteLine(TypeName(x))       
' Prints Integer

Type Conversion
Dim d As Single = 3.5
Dim i As Integer = CType(d, Integer)  
' set to 4 (Banker's rounding)
i = CInt(d) 
' same result as CType
i = Int(d)   
' set to 3 (Int function truncates the decimal)

Value Types
bool
byte, sbyte
char
short, ushort, int, uint, long, ulong
float, double
decimal
DateTime  
(not a built-in C# type)

Reference Types
object
string

Initializing
bool correct = true;
byte b = 0x2A;  
// hex

object person = null;
string name = "Dwight";
char grade = 'B';
DateTime today = DateTime.Parse("12/31/2007 12:15:00");
decimal amount = 35.99m;
float gpa = 2.9f;
double pi = 3.14159265;
long lTotal = 123456L;
short sTotal = 123;
ushort usTotal = 123;
uint uiTotal = 123;
ulong ulTotal = 123;

Type Information
int x;
Console.WriteLine(x.GetType());              
// Prints System.Int32
Console.WriteLine(typeof(int));              
// Prints System.Int32
Console.WriteLine(x.GetType().Name);  
// prints Int32

Type Conversion
float d = 3.5f;
int i = (int)d;  
// set to 3  (truncates decimal)

VB.NET

Constants

C#

Const MAX_STUDENTS As Integer = 25

' Can set to a const or var; may be initialized in a constructor
ReadOnly MIN_DIAMETER As Single = 4.93

const int MAX_STUDENTS = 25;

// Can set to a const or var; may be initialized in a constructor
readonly float MIN_DIAMETER = 4.93f;

VB.NET

Enumerations

C#

Enum Action
  Start 
  [Stop]   
' Stop is a reserved word
  Rewind
  Forward
End Enum

Enum Status
  Flunk = 50
  Pass = 70
  Excel = 90
End Enum

Dim a As Action = Action.Stop
If a <> Action.Start Then _
   Console.WriteLine(a.ToString & " is " & a)    
' Prints "Stop is 1"

Console.WriteLine(Status.Pass)     
' Prints 70
Console.WriteLine(Status.Pass.ToString())     
' Prints Pass

enum Action {Start, Stop, Rewind, Forward};
enum Status {Flunk = 50, Pass = 70, Excel = 90};

Action a = Action.Stop;
if (a != Action.Start)
  Console.WriteLine(a + " is " + (int) a);    
// Prints "Stop is 1"

Console.WriteLine((int) Status.Pass);   
// Prints 70
Console.WriteLine(Status.Pass);     
// Prints Pass

VB.NET

Operators

C#

Comparison
=  <  >  <=  >=  <>

Arithmetic
+  -  *  /
Mod
(integer division)
(raise to a power)

Assignment
=  +=  -=  *=  /=  \=  ^=  <<=  >>=  &=

Bitwise
And   Or   Xor   Not   <<   >>

Logical
AndAlso   OrElse   And   Or   Xor   Not

Note: AndAlso and OrElse perform short-circuit logical evaluations

String Concatenation
&

Comparison
==  <  >  <=  >=  !=

Arithmetic
+  -  *  /
(mod)
(integer division if both operands are ints)
Math.Pow(x, y)

Assignment
=  +=  -=  *=  /=   %=  &=  |=  ^=  <<=  >>=  ++  --

Bitwise
&   |   ^   ~   <<   >>

Logical
&&   ||   &   |   ^   !

Note: && and || perform short-circuit logical evaluations

String Concatenation
+

VB.NET

Choices

C#

' Ternary/Conditional operator (Iff evaluates 2nd and 3rd expressions)
greeting = If(age < 20, "What's up?", "Hello")

' One line doesn't require "End If"
If age < 20 Then greeting = "What's up?"
If age < 20 Then greeting = "What's up?" Else greeting = "Hello"

' Use : to put two commands on same line
If x <> 100 AndAlso y < 5 Then x *= 5 : y *= 2  

' Preferred
If x <> 100 AndAlso y < 5 Then
  x *= 5
  y *= 2
End If

' To break up any long single line use _
If whenYouHaveAReally < longLine And _
  itNeedsToBeBrokenInto2 > Lines Then _
  UseTheUnderscore(charToBreakItUp)

'If x > 5 Then
  x *= y
ElseIf x = 5 OrElse y Mod 2 = 0 Then
  x += y
ElseIf x < 10 Then
  x -= y
Else
  x /= y
End If

Select Case color   ' Must be a primitive data type
  Case "pink", "red"
    r += 1
  Case "blue"
    b += 1
  Case "green"
    g += 1
  Case Else
    other += 1
End Select

// Ternary/Conditional operator
greeting = age < 20 ? "What's up?" : "Hello";

if (age < 20)
  greeting = "What's up?";
else
  greeting = "Hello";

// Multiple statements must be enclosed in {}
if (x != 100 && y < 5) {   
  x *= 5;
  y *= 2;
}

 

No need for _ or : since ; is used to terminate each statement.





if
(x > 5)
  x *= y;
else if (x == 5 || y % 2 == 0)
  x += y;
else if (x < 10)
  x -= y;
else
  x /= y;



// Every case must end with break or goto case
switch (color) {                         
// Must be integer or string
  case "pink":
  case "red":    r++;    break;
  case "blue":   b++;  
break;
  case "green": g++;  
break;
  default:    other++;   break;      
// break necessary on default
}

VB.NET

Loops

C#

Pre-test Loops:

While c < 10
  c += 1
End While

Do Until c = 10 
  c += 1
Loop

Do While c < 10
  c += 1
Loop

For c = 2 To 10 Step 2
  Console.WriteLine(c)
Next


Post-test Loops:

Do 
  c += 1
Loop While c < 10

Do 
  c += 1
Loop Until c = 10

'  Array or collection looping
Dim names As String() = {"Fred", "Sue", "Barney"}
For Each s As String In names
  Console.WriteLine(s)
Next

' Breaking out of loops
Dim i As Integer = 0
While (True)
  If (i = 5) Then Exit While
  i += 1
End While

' Continue to next iteration
For i = 0 To 4
  If i < 4 Then Continue For
  Console.WriteLine(i)  
' Only prints 4
Next

Pre-test Loops:  

// no "until" keyword
while (c < 10)
  c++;


for (c = 2; c <= 10; c += 2)
  Console.WriteLine(c);


Post-test Loop:

do
  c++;
while (c < 10);

// Array or collection looping
string[] names = {"Fred", "Sue", "Barney"};
foreach (string s in names)
  Console.WriteLine(s);


// Breaking out of loops
int i = 0;
while (true) {
  if (i == 5)
    break;
  i++;
}

// Continue to next iteration
for (i = 0; i < 5; i++) {
  if (i < 4)
    continue;
  Console.WriteLine(i);  
// Only prints 4
}

VB.NET

Arrays

C#

Dim nums() As Integer = {1, 2, 3} 
For i As Integer = 0 To nums.Length - 1
  Console.WriteLine(nums(i))
Next

' 4 is the index of the last element, so it holds 5 elements
Dim names(4) As String
names(0) = "David"
names(5) = "Bobby" 
' Throws System.IndexOutOfRangeException

' Resize the array, keeping the existing values (Preserve is optional)
ReDim Preserve names(6)



Dim twoD(rows-1, cols-1) As Single
twoD(2, 0) = 4.5

Dim jagged()() As Integer = { _
  New Integer(4) {}, New Integer(1) {}, New Integer(2) {} }
jagged(0)(4) = 5

int[] nums = {1, 2, 3};
for (int i = 0; i < nums.Length; i++)
  Console.WriteLine(nums[i]);


// 5 is the size of the array
string[] names = new string[5];
names[0] = "David";
names[5] = "Bobby";  
// Throws System.IndexOutOfRangeException


// C# can't dynamically resize an array.  Just copy into new array.
string[] names2 = new string[7];
Array.Copy(names, names2, names.Length);  
// or names.CopyTo(names2, 0); 

float[,] twoD = new float[rows, cols];
twoD[2,0] = 4.5f; 

int[][] jagged = new int[3][] {
  new int[5], new int[2], new int[3] };
jagged[0][4] = 5;

VB.NET

Functions

C#

' Pass by value (in, default), reference (in/out), and reference (out) 
Sub TestFunc(ByVal x As Integer, ByRef y As Integer, ByRef z As Integer)
  x += 1
  y += 1
  z = 5
End Sub

Dim a = 1, b = 1, c As Integer   ' c set to zero by default 
TestFunc(a, b, c)
Console.WriteLine("{0} {1} {2}", a, b, c)  
' 1 2 5

' Accept variable number of arguments
Function Sum(ByVal ParamArray nums As Integer()) As Integer
  Sum = 0 
  For Each i As Integer In nums
    Sum += i
  Next
End Function  
' Or use Return statement like C#

Dim total As Integer = Sum(4, 3, 2, 1)  
' returns 10

' Optional parameters must be listed last and must have a default value
Sub SayHello(ByVal name As String, Optional ByVal prefix As String = "")
  Console.WriteLine("Greetings, " & prefix & " " & name)
End Sub

SayHello("Strangelove", "Dr.")
SayHello("Madonna")

// Pass by value (in, default), reference (in/out), and reference (out)
void TestFunc(int x, ref int y, out int z) {
  x++;  
  y++;
  z = 5;
}

int a = 1, b = 1, c;  // c doesn't need initializing
TestFunc(a, ref b, out c);
Console.WriteLine("{0} {1} {2}", a, b, c); 
// 1 2 5

// Accept variable number of arguments
int Sum(params int[] nums) {
  int sum = 0;
  foreach (int i in nums)
    sum += i;
  return sum;
}

int total = Sum(4, 3, 2, 1);   // returns 10

/* C# doesn't support optional arguments/parameters.  Just create two different versions of the same function. */ 
void SayHello(string name, string prefix) {
  Console.WriteLine("Greetings, " + prefix + " " + name);


void SayHello(string name) {
  SayHello(name, "");
}

VB.NET

Strings

C#

Special character constants (all also accessible from ControlChars class)
vbCrLf, vbCr, vbLf, vbNewLine
vbNullString
vbTab
vbBack
vbFormFeed
vbVerticalTab
""

' String concatenation (use & or +)
Dim school As String = "Harding" & vbTab
school = school & "University"
' school is "Harding (tab) University"

' Chars
Dim letter As Char = school.Chars(0)  
' letter is H
letter = Convert.ToChar(65)                
' letter is A
letter = Chr(65)                                 
' same thing
Dim word() As Char = school.ToCharArray() ' word holds Harding

' No string literal operator
Dim msg As String = "File is c:\temp\x.dat"

' String comparison
Dim mascot As String = "Bisons"
If (mascot = "Bisons") Then   
' true
If (mascot.Equals("Bisons")) Then  
' true
If (mascot.ToUpper().Equals("BISONS")) Then  
' true
If (mascot.CompareTo("Bisons") = 0) Then   
' true

' String matching with Like - Regex is more powerful
If ("John 3:16" Like "Jo[Hh]? #:*") Then  
'true

' Substring
s = mascot.Substring(2, 3))
' s is "son"

' Replacement
s = mascot.Replace("sons", "nomial"))
' s is "Binomial"

' Split
Dim names As String = "Frank,Becky,Ethan,Braden"
Dim parts() As String = names.Split(",".ToCharArray())  
' One name in each slot

' Date to string
Dim dt As New DateTime(1973, 10, 12)
Dim s As String = "My birthday: " & dt.ToString("MMM dd, yyyy")  
' Oct 12, 1973

' Integer to String
Dim x As Integer = 2
Dim y As String = x.ToString()    
' y is "2"

' String to Integer
Dim x As Integer = Convert.ToInt32("-5")    
' x is -5

' Mutable string
Dim buffer As New System.Text.StringBuilder("two ")
buffer.Append("three ")
buffer.Insert(0, "one ")
buffer.Replace("two", "TWO")
Console.WriteLine(buffer)        
' Prints "one TWO three"

Escape sequences
\r    
// carriage-return
\n    
// line-feed
\t    
// tab
\\    
// backslash
\"    
// quote

// String concatenation
string school = "Harding\t";
school = school + "University";  
// school is "Harding (tab) University"

// Chars
char letter = school[0];           
// letter is H
letter = Convert.ToChar(65);    
// letter is A
letter = (char)65;                   
// same thing
char[] word = school.ToCharArray();   // word holds Harding

// String literal
string msg = @"File is c:\temp\x.dat";
// same as
string msg = "File is c:\\temp\\x.dat";

// String comparison
string mascot = "Bisons";
if (mascot == "Bisons")   
// true
if (mascot.Equals("Bisons"))   
// true
if (mascot.ToUpper().Equals("BISONS"))  
// true
if (mascot.CompareTo("Bisons") == 0)   
// true

// String matching - No Like equivalent, use Regex


// Substring
s = mascot.Substring(2, 3))    
// s is "son"

// Replacement
s = mascot.Replace("sons", "nomial"))    
// s is "Binomial"

// Split
string names = "Frank,Becky,Ethan,Braden";
string[] parts = names.Split(",".ToCharArray());  
// One name in each slot

// Date to string
DateTime dt = new DateTime(1973, 10, 12);
string s = dt.ToString("MMM dd, yyyy");    
// Oct 12, 1973

// int to string
int x = 2;
string y = x.ToString();    
// y is "2"

// string to int
int x = Convert.ToInt32("-5");    
// x is -5

// Mutable string
System.Text.StringBuilder buffer = new System.Text.StringBuilder("two ");
buffer.Append("three ");
buffer.Insert(0, "one ");
buffer.Replace("two", "TWO");
Console.WriteLine(buffer);    
// Prints "one TWO three"

VB.NET

Regular Expressions

C#

Imports System.Text.RegularExpressions

' Match a string pattern
Dim r As New Regex("j[aeiou]h?. \d:*", RegexOptions.IgnoreCase Or _
        RegexOptions.Compiled)
If (r.Match("John 3:16").Success) Then  
'true
    Console.WriteLine("Match")
End If

' Find and remember all matching patterns
Dim s As String = "My number is 305-1881, not 305-1818."
Dim r As New Regex("(\d+-\d+)")
Dim m As Match = r.Match(s)    
' Matches 305-1881 and 305-1818
While m.Success
    Console.WriteLine("Found number: " & m.Groups(1).Value & " at position " _
            & m.Groups(1).Index.ToString)
    m = m.NextMatch()
End While

' Remeber multiple parts of matched pattern
Dim r As New Regex("(\d\d):(\d\d) (am|pm)")
Dim m As Match = r.Match("We left at 03:15 pm.")
If m.Success Then
    Console.WriteLine("Hour: " & m.Groups(1).ToString)      
' 03
    Console.WriteLine("Min: " & m.Groups(2).ToString)        
' 15
    Console.WriteLine("Ending: " & m.Groups(3).ToString)  
' pm
End If

' Replace all occurrances of a pattern
Dim r As New Regex("h\w+?d", RegexOptions.IgnoreCase)
Dim s As String = r.Replace("I heard this was HARD!", "easy")  
' I easy this was easy!

' Replace matched patterns
Dim s As String = Regex.Replace("123 < 456", "(\d+) . (\d+)", "$2 > $1")  
' 456 > 123

' Split a string based on a pattern
Dim names As String = "Frank, Becky, Ethan, Braden"
Dim r As New Regex(",\s*")
Dim parts() As String = r.Split(names)  
' One name in each slot

using System.Text.RegularExpressions;

// Match a string pattern
Regex r = new Regex(@"j[aeiou]h?. \d:*", RegexOptions.IgnoreCase |
        RegexOptions.Compiled);
if (r.Match("John 3:16").Success)  
// true
    Console.WriteLine("Match");


// Find and remember all matching patterns
string s = "My number is 305-1881, not 305-1818.";
Regex r = new Regex("(\\d+-\\d+)");
// Matches 305-1881 and 305-1818
for (Match m = r.Match(s); m.Success; m = m.NextMatch())
    Console.WriteLine("Found number: " + m.Groups[1] + " at position " +
        m.Groups[1].Index);



// Remeber multiple parts of matched pattern
Regex r = new Regex("@(\d\d):(\d\d) (am|pm)");
Match m = r.Match("We left at 03:15 pm.");
if (m.Success) {
    Console.WriteLine("Hour: " + m.Groups[1]);      
// 03
    Console.WriteLine("Min: " + m.Groups[2]);        
// 15
    Console.WriteLine("Ending: " + m.Groups[3]);  
// pm
}

// Replace all occurrances of a pattern
Regex r = new Regex("h\\w+?d", RegexOptions.IgnoreCase);
string s = r.Replace("I heard this was HARD!", "easy"));  
// I easy this was easy!

// Replace matched patterns
string s = Regex.Replace("123 < 456", @"(\d+) . (\d+)", "$2 > $1");  
// 456 > 123

// Split a string based on a pattern
string names = "Frank, Becky, Ethan, Braden";
Regex r = new Regex(@",\s*");
string[] parts = r.Split(names);  
// One name in each slot

VB.NET

Exception Handling

C#

' Throw an exception
Dim ex As New Exception("Something is really wrong.")
Throw  ex 

' Catch an exception
Try 
  y = 0
  x = 10 / y
Catch ex As Exception When y = 0
' Argument and When is optional
  Console.WriteLine(ex.Message)
Finally
  Beep()
End Try

' Deprecated unstructured error handling
On Error GoTo MyErrorHandler
...
MyErrorHandler: Console.WriteLine(Err.Description)

// Throw an exception
Exception up = new Exception("Something is really wrong.");
throw up; 
// ha ha

// Catch an exception
try
  y = 0;
  x = 10 / y;
}
catch (Exception ex) {  
// Argument is optional, no "When" keyword 
  Console.WriteLine(ex.Message);
}
finally {
  Microsoft.VisualBasic.Interaction.Beep();
}

VB.NET

Namespaces

C#

Namespace Harding.Compsci.Graphics 
  ...
End Namespace

' or

Namespace Harding
  Namespace Compsci
    Namespace Graphics 
      ...
    End Namespace
 
End Namespace
End Namespace

Imports Harding.Compsci.Graphics

namespace Harding.Compsci.Graphics {
  ...
}

// or

namespace Harding {
  namespace Compsci {
    namespace Graphics {
      ...
    }
  }
}

using Harding.Compsci.Graphics;

VB.NET

Classes / Interfaces

C#

Accessibility keywords
Public
Private
Friend                   
Protected
Protected Friend
Shared

' Inheritance
Class FootballGame
  Inherits Competition
  ...
End Class 

' Interface definition
Interface IAlarmClock 
  ...
End Interface

// Extending an interface 
Interface IAlarmClock
  Inherits IClock
  ...
End Interface

// Interface implementation
Class WristWatch 
  Implements IAlarmClock, ITimer 
   ...
End Class 

Accessibility keywords
public
private
internal
protected
protected internal
static

// Inheritance
class FootballGame : Competition {
  ...
}


// Interface definition
interface IAlarmClock {
  ...
}

// Extending an interface 
interface IAlarmClock : IClock {
  ...
}


// Interface implementation
class WristWatch : IAlarmClock, ITimer {
   ...
}

VB.NET

Constructors / Destructors

C#

Class SuperHero
  Private _powerLevel As Integer

  Public Sub New()
    _powerLevel = 0
  End Sub

  Public Sub New(ByVal powerLevel As Integer)
    Me._powerLevel = powerLevel
  End Sub

  Protected Overrides Sub Finalize() 
   
' Desctructor code to free unmanaged resources
    MyBase.Finalize()
  End Sub
End Class

class SuperHero {
  private int _powerLevel;

  public SuperHero() {
     _powerLevel = 0;
  }

  public SuperHero(int powerLevel) {
    this._powerLevel= powerLevel; 
  }

  ~SuperHero() {
   
// Destructor code to free unmanaged resources.
    // Implicitly creates a Finalize method
  }
}

VB.NET

Using Objects

C#

Dim hero As SuperHero = New SuperHero
' or
Dim hero As New SuperHero

With hero
  .Name = "SpamMan"
  .PowerLevel = 3
End With

hero.Defend("Laura Jones")
hero.Rest()    
' Calling Shared method
' or
SuperHero.Rest()

Dim hero2 As SuperHero = hero  ' Both reference the same object
hero2.Name = "WormWoman"
Console.WriteLine(hero.Name)  
' Prints WormWoman

hero = Nothing    ' Free the object

If hero Is Nothing Then _
  hero = New SuperHero

Dim obj As Object = New SuperHero
If TypeOf obj Is SuperHero Then _
  Console.WriteLine("Is a SuperHero object.")

' Mark object for quick disposal
Using reader As StreamReader = File.OpenText("test.txt")
  Dim line As String = reader.ReadLine()
  While Not line Is Nothing
    Console.WriteLine(line)
    line = reader.ReadLine()
  End While
End Using

SuperHero hero = new SuperHero();


// No "With" construct
hero.Name = "SpamMan";
hero.PowerLevel = 3;

hero.Defend("Laura Jones");
SuperHero.Rest();  
// Calling static method



SuperHero hero2 = hero;  
// Both reference the same object
hero2.Name = "WormWoman";
Console.WriteLine(hero.Name);  
// Prints WormWoman

hero = null ;   // Free the object

if (hero == null)
  hero = new SuperHero();

Object obj = new SuperHero(); 
if (obj is SuperHero)
  Console.WriteLine("Is a SuperHero object.");

// Mark object for quick disposal
using (StreamReader reader = File.OpenText("test.txt")) {
  string line;
  while ((line = reader.ReadLine()) != null)
    Console.WriteLine(line);
}

VB.NET

Structs

C#

Structure StudentRecord
  Public name As String
  Public gpa As Single

  Public Sub New(ByVal name As String, ByVal gpa As Single)
    Me.name = name
    Me.gpa = gpa
  End Sub
End Structure

Dim stu As StudentRecord = New StudentRecord("Bob", 3.5)
Dim stu2 As StudentRecord = stu  

stu2.name = "Sue"
Console.WriteLine(stu.name)    
' Prints Bob
Console.WriteLine(stu2.name)  
' Prints Sue

struct StudentRecord {
  public string name;
  public float gpa;

  public StudentRecord(string name, float gpa) {
    this.name = name;
    this.gpa = gpa;
  }
}

StudentRecord stu = new StudentRecord("Bob", 3.5f);
StudentRecord stu2 = stu;  

stu2.name = "Sue";
Console.WriteLine(stu.name);   
// Prints Bob
Console.WriteLine(stu2.name);  
// Prints Sue

VB.NET

Properties

C#

Private _size As Integer

Public Property Size() As Integer
  Get
    Return _size
  End Get
  Set (ByVal Value As Integer)
    If Value < 0 Then
      _size = 0
    Else
      _size = Value
    End If
  End Set
End Property

foo.Size += 1

private int _size;

public int Size {
  get {
    return _size;
  }
  set {
    if (value < 0)
      _size = 0;
    else
      _size = value;
  }
}


foo.Size++;

VB.NET

Delegates / Events

C#

Delegate Sub MsgArrivedEventHandler(ByVal message As String)

Event MsgArrivedEvent As MsgArrivedEventHandler

' or to define an event which declares a delegate implicitly
Event MsgArrivedEvent(ByVal message As String)

AddHandler MsgArrivedEvent, AddressOf My_MsgArrivedCallback
' Won't throw an exception if obj is Nothing
RaiseEvent MsgArrivedEvent("Test message")
RemoveHandler MsgArrivedEvent, AddressOf My_MsgArrivedCallback

Imports System.Windows.Forms

Dim WithEvents MyButton As Button   ' WithEvents can't be used on local variable
MyButton = New Button

Private Sub MyButton_Click(ByVal sender As System.Object, _
  ByVal e As System.EventArgs) Handles MyButton.Click
  MessageBox.Show(Me, "Button was clicked", "Info", _
    MessageBoxButtons.OK, MessageBoxIcon.Information)
End Sub

delegate void MsgArrivedEventHandler(string message);

event MsgArrivedEventHandler MsgArrivedEvent;

// Delegates must be used with events in C#


MsgArrivedEvent += new MsgArrivedEventHandler(My_MsgArrivedEventCallback);
MsgArrivedEvent("Test message");   
// Throws exception if obj is null
MsgArrivedEvent -= new MsgArrivedEventHandler(My_MsgArrivedEventCallback);



using System.Windows.Forms;

Button MyButton = new Button(); 
MyButton.Click += new System.EventHandler(MyButton_Click);

private void MyButton_Click(object sender, System.EventArgs e) {
  MessageBox.Show(this, "Button was clicked", "Info",
    MessageBoxButtons.OK, MessageBoxIcon.Information);
}

VB.NET

Console I/O

C#

Console.Write("What's your name? ")
Dim name As String = Console.ReadLine()
Console.Write("How old are you? ")
Dim age As Integer = Val(Console.ReadLine())
Console.WriteLine("{0} is {1} years old.", name, age) 
' or
Console.WriteLine(name & " is " & age & " years old.")

Dim c As Integer
c = Console.Read()   
' Read single char
Console.WriteLine(c)  
' Prints 65 if user enters "A"

Console.Write("What's your name? ");
string name = Console.ReadLine();
Console.Write("How old are you? ");
int age = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("{0} is {1} years old.", name, age);
// or
Console.WriteLine(name + " is " + age + " years old.");


int c = Console.Read(); 
// Read single char
Console.WriteLine(c);   
// Prints 65 if user enters "A"

VB.NET

File I/O

C#

Imports System.IO

' Write out to text file
Dim writer As StreamWriter = File.CreateText("c:\myfile.txt")
writer.WriteLine("Out to file.")
writer.Close()

' Read all lines from text file
Dim reader As StreamReader = File.OpenText("c:\myfile.txt")
Dim line As String = reader.ReadLine()
While Not line Is Nothing
  Console.WriteLine(line)
  line = reader.ReadLine()
End While
reader.Close()

' Write out to binary file
Dim str As String = "Text data"
Dim num As Integer = 123
Dim binWriter As New BinaryWriter(File.OpenWrite("c:\myfile.dat")) 
binWriter.Write(str) 
binWriter.Write(num) 
binWriter.Close()

' Read from binary file
Dim binReader As New BinaryReader(File.OpenRead("c:\myfile.dat"))
str = binReader.ReadString()
num = binReader.ReadInt32()
binReader.Close()

using System.IO;

// Write out to text file
StreamWriter writer = File.CreateText("c:\\myfile.txt");
writer.WriteLine("Out to file.");
writer.Close();

// Read all lines from text file
StreamReader reader = File.OpenText("c:\\myfile.txt");
string line = reader.ReadLine();
while (line != null) {
  Console.WriteLine(line);
  line = reader.ReadLine();
}
reader.Close();

// Write out to binary file
string str = "Text data";
int num = 123;
BinaryWriter binWriter = new BinaryWriter(File.OpenWrite("c:\\myfile.dat"));
binWriter.Write(str);
binWriter.Write(num);
binWriter.Close();

// Read from binary file
BinaryReader binReader = new BinaryReader(File.OpenRead("c:\\myfile.dat"));
str = binReader.ReadString();
num = binReader.ReadInt32();
binReader.Close();

 

 

Posted by dotnetpower
TAG c#, vb.net

댓글을 달아 주세요

XCode2009.12.16 16:40
직접 포토샵으로 작업해 봤다.

아무래도 디자이너 손을 거치긴 해야 할것 같다.

프로토타입 크레이지 알람 ㅡㅡ;


Posted by dotnetpower

댓글을 달아 주세요

XCode2009.12.11 09:33

우선 결과 화면부터 보면.. 다음 그림과 같습니다.






이전의 HelloWorld와 비슷한데요, 


우선  Xcode에서 MainWindow.xib를 더블클릭 하여 IB 를 실행한 후 다음처럼 뷰, 텍스트필드와 버튼을 올려놓습니다.


UIView는 이름을 view, UITextField는 이름을 textField 로, UIButton은 button 으로 이름을 정하였고, 다음처럼 View Identify에 아울렛 설정을 합니다.





버튼 액션은 TouchDown에 button_TouchDown에 걸었습니다.

그리고, IB에서 File-Write Class Files를 선택하고, 파일명을 view 라고 지정 합니다.


소스를 다음과 같이 입력합니다.


view.h 파일



view.m 파일



이렇게 해서  Command + R 을 누르면, 첫 화면처럼 결과가 나옵니다.


이렇게 해 보면서 특이한점은 스트링 비교 할때 if(name=="") 처럼은 안되고, 닷넷의 equals와 비슷한 방식으로 메서드를 이용해서 비교 하는게 특이합니다. 또한, 마지막에 name, alert 은 release해 줬는데, msg는 안해줬습니다.

명시적으로 메모리 할당을 하지 않으면 가비지 컬렉터에게 수집당하기 때문입니다. 이상한건, 가비지 컬렉터가 수집하더라고 임의로 릴리즈를 해 주니깐, 어플이 다운되어 버리더라고요... 참.. 이상합니다.

Posted by dotnetpower

댓글을 달아 주세요

  1. LEGO

    감사합니다!!
    name="" 이 부분 안되서 고민하고 있었는데
    이걸로 해결이 됐네요ㅠㅠㅠㅠㅠㅠㅠㅠ
    복 받으실거에요ㅠㅠ

    2011.08.31 18:25 [ ADDR : EDIT/ DEL : REPLY ]
  2. • Dude.. I am not much into reading, but somehow I got to read lots of articles on your blog. Its amazing how interesting it is for me to visit you very often. -

    2012.01.02 23:42 [ ADDR : EDIT/ DEL : REPLY ]

기타2009.11.03 11:07

오는 2010년에 MS에서 주최하는 이매진컵 대회가 폴란드에서 개최됩니다.

많은 대학생 여러분들은 과감하게 도전해 보시기 바랍니다. :)



"진정으로, 얼마나 간절히 꿈꾸고 있습니까?"

- 레이 오지, Microsoft 최고 소프트웨어 아키텍트, 2009 이매진컵 세계대회에서. 
 
올해 여덟 살이 된 이매진컵은 글로벌 테크놀로지 경진대회로서, 현실에서 일어나는 문제를 해결할 수 있는 솔루션을 찾아내는데 관심이 있습니다. 이매진컵은 세계에서 가장 재능 있는 소프트웨어 디자이너, 프로그래머, 게임 개발자, 디지털 미디어 매니아들의 꿈을 격려합니다. 여러분들이라면 기아 구제, 빈곤, 교육, 질병 통제, 헬스케어, 환경 문제를 비롯한 현재 세계가 직면한 중대한 문제에 정면으로 도전하실 수 있습니다.
 
여러분은 이매진컵에 참가함으로써,
  • 여러분의 재능이 오늘날 우리가 직면한 가장 어려운 문제를 해결하는데 기여할 수 있습니다. 나아가 여러분의 아이디어가 실제 비즈니스가 될 수도 있습니다.
  • 이 지구에서 가장 뛰어난 학생들과 새로운 기술을 두고 경쟁할 수 있습니다.
  • 전 세계 각국의 다양한 사람들과 친구가 될 수 있습니다.
  • 엄청난 상금, 마이크로소프트의 인턴쉽, 2010년 여름, 코페르니쿠스와 쇼팽의 나라 폴란드에서의 일주일을 경험할 수 있습니다.
     

"상상하라. 
우리가 직면한 난제가 기술로써 해결되는 세상을 ."

 
세계 최고의 학생 기술 경진대회인 이매진컵에 도전하세요! 2002년 시작 이래, 이매진컵은 세계에서 가장 뛰어난 학생들이 참여하여 변화를 만들어왔습니다. 작년의 경우, 142개국 300,000명이 넘는 학생들이 2009년 이매진컵에 참여하였습니다.


가장 먼저 해야 할 일

시작이 반입니다. 아래의 안내에 따라, 2010년 이매진컵에 도전하세요!

  • 첫단추 이매진컵에 참여하기 위해서는 먼저 등록을 마치셔야 합니다.
  • 계속 관심을 가져주세요: 등록을 마치시면 뉴스레터(영문)를 받아보실 수 있습니다. 이매진컵에 대한 최신 정보를 받아보시기 위한 가장 좋은 방법입니다.
  • 여러분의 재능과 동기를 고려하여 어느 경쟁부문에 참여할지를 결정하세요: 2010년 대회 개요를 참고하시고, 참가 부문을 결정하세요!
  • 이제 로그인 하세요. 이제 여러분은 경쟁부문에 대한 자세한 정보, 자격요건, 마감일, 참가자 포럼에 접근할 수 있습니다.
  • 주제에 대해 고민하세요! 이매진컵 2010의 주제는 "우리가 직면한 난제가 기술로써 해결되는 세상을 상상하라" 입니다. 프로젝트를 시작할 때, UN에서 정한 8가지 밀레니엄 개발 목표를 참고하시면 도움이 되실 것입니다.  
  • 필독이에요 News에서 2010 이매진컵의 최근 소식과 예전 수상작들을 살펴 보시고, 성공 스토리를 통해 영감을 얻으시는 것도 좋겠죠? 이매진컵 블로그도 잊지 마세요.
  • 그 날의 감동을 느껴보세요 작년 이집트 카이로에서 있었던 월드와이드 파이널 비디오를 통해 그 날의 감동을 느껴보세요. 마이크로소프트는 여러분 모두가 2010 이매진컵 무대에 설 수 있기를 기원합니다!
  • 참가자 포럼을 방문하여 여러분과 비슷한 다른 학생들을 만나보세요
글로벌 이매진컵 커뮤니티에 오신 것을 환영합니다. 저희는 여러분들을 만나 열심히 연구하고, 열심히 즐길 그 날을 기대하고 있겠습니다. 여러분과 함께라면, 더 나은 세상을 만들 수 있으리라 믿습니다.



경쟁 부문


소프트웨어 설계
 
전 세계에서 지역/국가별 예선을 거치는 유일한 경쟁 부문입니다. 미션은 간단합니다. 마이크로소프트의 툴과 테크놀로지를 이용하여 실제 구현되는 소프트웨어와 서비스 어플리케이션을 만드시면 됩니다. 큰 꿈을 꾸세요! 세계 대회 무대에 서기 위해서는 여러분에게는 창의성과 이를 현실로 구현할 수 있는 능력이 요구됩니다. 이는 여러분만의 전설을 쓰게 하고 삶을 통째로 변화시킬 것입니다. 작은 아이디어에서 시작한 애플리케이션이 전 세계를 바꿀 수 있습니다. 
 

게임 디자인
 
무(無)에서 유를 창조하여, 완성작으로 세상을 놀라게 하세요.  Microsoft's XNA Game Studio 3.0, Visual Studio 또는 Silverlight을 이용해 게임을 만드세요. 게임을 즐기는 다른 학생들을 불러모으세요... 여러분의 게임을 세상에 내놓을 기회인 동시에 전 세계를 변화시킬 수 있는 기회입니다. 게임 디자인 부문은 게임 개발자를 꿈꾸거나 게임 비즈니스에서 창업을 생각하고 계신다면 많이 배우고 업계로 진출할 수 있는 기회입니다. 전 세계가, 바로 여러분이 만든 게임을 플레이 해보기 위해 기다립니다!
 


디지털 미디어
 

전 세계에서 홈메이드 비디오의 인기는 높아만 갑니다. 사진, 텍스트, 음악, 목소리, 동영상 등을 편집하고 웹사이트에 올리는 과정이 쉬워졌기 때문이지요. 디지털 미디어 부문에서는 전 세계의 학생들이 그들의 창의력을 발휘하여 웹을 통해 배포할 수 있는 비디오를 만들어 이매진컵의 주제를 표현해야 합니다. 여러분은 전 세계 커뮤니티와 소통하고, 설명하며, 감동시키기 위해 인터넷이라는 매체를 이용할 것입니다. 또한 출품작은 비주얼과 사운드의 표현과 함께, 짧은 시간 내에 메시지를 전달해야 합니다.   
 
Posted by dotnetpower

댓글을 달아 주세요

기타2009.10.29 16:28
미국계정을 위한 방법들이 거의 막혔습니다.

제가 작년에 할때는 홍콩으로 가입해서 국가 변경해서 미국 계정을 생성을 했는데, 이 방법이 먹히질 않네요.

Facebook 같은 사이트의 프로모션도 끝나서 더이상 받을수가 없었는데..

Promo Dispenser 라는 사이트에서 받을수 있습니다. 이 사이트에 회원 가입하고 로그인을 하면 다음과 같이 Free Redeem 코드를 얻을수 있도록 연결이 되었습니다.



단, 한번 코드를 받게되면 다시 받기까지 24시간이 지나야 하는군요.

미국계정을 만드는 이유는 엄청난 어플을 받을수 있는 기회가 주어진다는것!!

이 글이 도움이 되었다면 추천 한표!! 부탁해용~ ㅎ

Posted by dotnetpower

댓글을 달아 주세요

  1. 회원가입은 어캐하능거죠?

    어캐 하는건가;;

    2009.12.20 13:12 [ ADDR : EDIT/ DEL : REPLY ]
  2. 회원가입은 어캐하능거죠?

    회원가입은 어캐하능거죠?

    2009.12.20 13:12 [ ADDR : EDIT/ DEL : REPLY ]
  3. 정보 감사합니다 마침 찾고 있었는데

    2011.04.03 18:43 [ ADDR : EDIT/ DEL : REPLY ]

ASP.NET2009.10.20 15:47

MVC 패턴에서 AJAX을 쓰기가 꽤 까다롭습니다.


위 그림과 같이 페이지 요청을 하면 라우팅 테이블(또는 룰)을 거쳐 Controller->Model->View 의 흐름을 거치게 됩니다.

기존 WebForm 에서는 간단히 처리가 되는데, MVC 모델에서는 간단하지가 않죠.

일전에 자바 프로젝트를 하면서 MVC 2 모델에 Spring 위에서 AJAX을 구현해야 하는 경우가 생겼습니다. 이때는 Return Type이 XML 문서로써, AJAX 요청에 대해서 MultiActionController 를 상속받아서 처리한 경우가 있었습니다. 이건 Spring 프레임웍에서 지원하는거라 별 어려움없이 xml 설정과 액션 우회 방식으로 처리 되어 실제 흐름은 위 그림과 비교 해 보면 실존하는 페이지 View 가 없고, Document 객체를 메모리에 Writing 시키는 방식으로 처리 했습니다.

제가 MS 제품을 좋아 하는 이유가 쓰기 편하게 설계가 되어 있다는 점 입니다. 마침 Walkthrough: Adding ASP.NET AJAX Scripting to an MVC Project 문서를 발견하여 간단히 따라 할수 있도록 정리 해 봤습니다.

  • 준비물
    • Microsoft Visual Studio 2008
    • ASP.NET MVC 2 - Download

1. 프로젝트 시작하기


위 두가지가 설치되었으면 Visual Studio 를 실행하고, 그림과 같이 프로젝트 템플릿을 ASP.NET MVC 2 Web Application 을 선택하고, 프로젝트명을 MVCAjaxApplication 이라고 입력한 후 확인을 누릅니다.



2. ASP.NET AJAX 스크립트 라이브러리를 스크립트 참조

솔루션 탐색기에서 /Views/Shared/Site.Master 를 선택하고, 소스보기를 한후 아래 코드를 head 에 추가합니다.



3. HomeController 클래스에 액션 메서드 추가

솔루션 탐색기에서 /Controllers/HomeController.vb 를 선택 하고, 다음과 같이 액션 메서드를 추가 해 줍니다.
    Public Function GetStatus() As String
        Return "Status OK at " + DateTime.Now.ToLongTimeString()
    End Function

    Public Function UpdateForm(ByVal textBox1 As String) As String
        If textBox1 <> "Enter text" Then
            Return "You entered: """ + textBox1.ToString() + """ at " + DateTime.Now.ToLongTimeString()
        End If

        Return [String].Empty
    End Function


4. Index 페이지 재 정의

지금까지 한 작업들을 보여주는 View 페이지(/Views/Home/Index.aspx)에서 <asp:Content> 부분을 다음과 같이 수정합니다.


5. 테스트

지금까지 작업한 내용을 확인하기 위해 "실행" 을 해 봅니다.
그러면 다음과 같이 잘 나옵니다.(혹시 index.aspx 에 포커스를 두고 실행하면 라우팅 오류가 날수 있으므로, 컴파일 후 Default.aspx 페이지에서 실행 하시기 바랍니다.)


이렇게 간단하게 ASP.NET MVC 에서 AJAX을 구현 할수 있습니다.
Posted by dotnetpower

댓글을 달아 주세요

VB.NET2009.10.20 10:53

Visual Studio 2010 은 IDE가 WPF로 만들어져 무겁게 느껴지는데요, 사실 내부적으로는 더 빨라 졌습니다.



Visual Basic의 가장 큰 장점인 백그라운드 컴파일링 부분인데, MS 의 Visual Studio Langage Program Manager인 Avner Aharoni 씨가 2008버전과 2010 버전을 테스트 한 내용입니다.

한번 해 보시겠어요?
Posted by dotnetpower

댓글을 달아 주세요

기타2009.09.29 14:17























Posted by dotnetpower
TAG 낙서

댓글을 달아 주세요

기타2009.09.02 11:02

최근 Twitter, Facebook 에 이어 인크루트, 네이트온 에서도 인맥서비스를 위한 SNS 에 몰두 하고 있습니다.
최근 서비스 개편을 한 인크루트의 인맥 서비스는 Facebook 을 옮겨놓은듯한 인상까지 주네요. 좀더 보완이 필요하겠지만 서비스 확장성은 무한 하다고 생각을 합니다.

이직 희망 업체의 재직자와 미리 인맥을 만들고 입사시 유리하게 사용하기 좋겠군요 ㅎㅎ

채용과 관련된 인맥!!! 기대 됩니다. http://nugu.incruit.com/nugumain/nugu.aspx



Posted by dotnetpower
TAG 인맥

댓글을 달아 주세요

Think about it.2009.08.25 14:28

요즘 자주 느끼지만, 소프트웨어 기술이 아주 성숙 했다는 생각을 합니다.
닷넷, 자바, 기타 언어들 포함해서...

그리고, 웹의 발전도 아주 급속도로 빨라지고 있는데요, 지금 웹2.0 시대 이니깐, 3.0에는 어떻게 바뀔까 하는 의문이 드네요.
여러 자료를 검색 해 보니, 힌트가 조금씩 나오고 있습니다.

우선은 웹으로 무엇을 하던간에, 네트웍 속도가 좀더 빨라져야 하니까 아무래도 동영상 기반 정보들이 넘쳐날것 같네요~ 스토리지는 점점 더 커지겠고.. 몇년만 지나도, 88만원 특가 하드 4TB!! 머.. 이런씩으로 말이지요..



웹 3.0에서 위키페디아 같은 곳에서는 이렇게 정의를 하고 있습니다.

웹 3.0(Web 3.0)은 월드 와이드 웹이 앞으로 어떻게 될 것인지를 서술할 때 쓰이는 용어이다. 최근의 웹 혁명을 서술하기 위해 쓰이는 웹 2.0이라는 구문의 도입에 따라 수많은 기사와 기자, 그리고 산업을 이끄는 사람들이 웹 3.0이라는 용어를 사용하여 앞으로의 인터넷 혁명의 파동에 대한 가설을 세운다.

월드 와이드 웹의 혁명의 다음 단계에 대한 관점은 매우 다양하다. 어떠한 사람들은 시맨틱 웹과 같은 새로 생겨난 기술들이 사람들에게 쓰이는 웹을 변형시킬 것이며 인공 지능에 대한 새로운 가능성을 부여할 것이라고 믿고 있다. 다른 공상가들은 인터넷 연결 속도가 빨라지고 모듈식 웹 애플리케이션의 수가 증가되며 컴퓨터 그래픽스가 앞서 나가게 됨에 따라 월드 와이드 웹의 혁명에 중요한 역할을 하게 될 것이라고 넌지시 말을 던지기도 했다.


제 생각엔 정말 시멘틱 웹으로 발전이 될것 같네요.. 그 초석을 웹서비스와 같은 기술들이 마련해 주고 있으니깐요, 더불어 Entity Framework 와 같이 뽀노(PONO) ^^ 들이 진화해 가고 있고, 점점 SNS와 같은 서비스들이 많이지면서 SOA의 사용량이 폭팔적으로 늘고 있으니 말이죠...

젤 중요한 온톨로지 까지 잘 동작하게 된다면, 그동안 많은 유수의 공대에서 연구하던 AI 가 적용된다면...

애니메이션 공각기동대와 같은 일도 발생할 여지가 생기겠죠..

결국에는 컴퓨터 기술발전을 거듭할 수록 인간의 관여가 떨어지게 될것 같습니다.

넥플릭스의 설립자 리드 헤스팅스는 웹의 양상을 동영상 기반의 웹이라고 예상하고 있는데, 충분히 가능할것 같습니다.
아주~ 기대가 됩니다.

자료를 좀더 찾아봐야겠네요 ^^
Posted by dotnetpower
TAG 웹3.0

댓글을 달아 주세요