« | August 2025 | » | 日 | 一 | 二 | 三 | 四 | 五 | 六 | | | | | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | | | | | | | |
|
统计 |
blog名称:小雨 日志总数:262 评论数量:1273 留言数量:15 访问次数:4672147 建立时间:2005年1月8日 |
| 
|
W3CHINA Blog首页 管理页面 写新日志 退出
[知识积累]VB.NET and C# 比较 |
http://dev.csdn.net/article/25/25324.shtm
VB.NET
C#
Comments
' Single line onlyRem Single line only
// Single line/* Multiple line *//// XML comments on single line/** XML comments on multiple lines */
Data Types
Value TypesBooleanByteChar (example: "A"c)Short, Integer, LongSingle, DoubleDecimalDate
Reference TypesObjectString
Dim x As Integer Console.WriteLine(x.GetType()) ' Prints System.Int32 Console.WriteLine(TypeName(x)) ' Prints Integer
' Type conversionDim numDecimal As Single = 3.5 Dim numInt As IntegernumInt = CType(numDecimal, Integer) ' set to 4 (Banker's rounding)numInt = CInt(numDecimal) ' same result as CTypenumInt = Int(numDecimal) ' set to 3 (Int function truncates the decimal)
Value Typesboolbyte, sbytechar (example: 'A')short, ushort, int, uint, long, ulongfloat, doubledecimalDateTime (not a built-in C# type)
Reference Typesobjectstring
int x;Console.WriteLine(x.GetType()); // Prints System.Int32Console.WriteLine(typeof(int)); // Prints System.Int32
// Type conversion double numDecimal = 3.5; int numInt = (int) numDecimal; // set to 3 (truncates decimal)
Constants
Const MAX_STUDENTS As Integer = 25
const int MAX_STUDENTS = 25;
Enumerations
Enum Action Start [Stop] ' Stop is a reserved word Rewind Forward End Enum Enum Status Flunk = 50 Pass = 70 Excel = 90 End EnumDim a As Action = Action.Stop If a <> Action.Start Then Console.WriteLine(a) ' Prints 1 Console.WriteLine(Status.Pass) ' Prints 70 Dim s As Type = GetType(Status) Console.WriteLine([Enum].GetName(s, Status.Pass)) ' 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(Status.Pass); // Prints Pass
Operators
Comparison= < > <= >= <>
Arithmetic+ - * /Mod\ (integer division)^ (raise to a power)
Assignment= += -= *= /= \= ^= <<= >>= &=
BitwiseAnd AndAlso Or OrElse Not << >>
LogicalAnd AndAlso Or OrElse Not
Note: AndAlso and OrElse are for short-circuiting 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+
Choices
greeting = IIf(age < 20, "What's up?", "Hello")
' One line doesn't require "End If", no "Else"If language = "VB.NET" Then langType = "verbose"
' Use : to put two commands on same lineIf x <> 100 Then x *= 5 : y *= 2
' or to break up any long single command use _If whenYouHaveAReally < longLine And itNeedsToBeBrokenInto2 > Lines Then _ UseTheUnderscore(charToBreakItUp)
'If x > 5 Then x *= y ElseIf x = 5 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
greeting = age < 20 ? "What's up?" : "Hello";
if (x != 100) { // Multiple statements must be enclosed in {} x *= 5; y *= 2;}
No need for _ or : since ; is used to terminate each statement.
if (x > 5) x *= y; else if (x == 5) x += y; else if (x < 10) x -= y; else x /= y;
switch (color) { // Must be integer or string case "pink": case "red": r++; break; // break is mandatory; no fall-through case "blue": b++; break; case "green": g++; break; default: other++; break; // break necessary on default}
Loops
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 loopingDim names As String() = {"Fred", "Sue", "Barney"} For Each s As String In names Console.WriteLine(s) Next
Pre-test Loops:
// no "until" keywordwhile (i < 10) i++;for (i = 2; i < = 10; i += 2) Console.WriteLine(i);
Post-test Loop:do i++; while (i < 10);// Array or collection loopingstring[] names = {"Fred", "Sue", "Barney"};foreach (string s in names) Console.WriteLine(s);
Arrays
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 elementsDim 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.5Dim 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 arraystring[] names = new string[5];names[0] = "David";names[5] = "Bobby"; // Throws System.IndexOutOfRangeException // C# doesn't 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;
Functions
' 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 SubSayHello("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 initializingTestFunc(a, ref b, out c);Console.WriteLine("{0} {1} {2}", a, b, c); // 1 2 5
// Accept variable number of argumentsint 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, ""); }
Exception Handling
' Deprecated unstructured error handlingOn Error GoTo MyErrorHandler...MyErrorHandler: Console.WriteLine(Err.Description)Dim ex As New Exception("Something is really wrong.") Throw ex
Try y = 0 x = 10 / yCatch ex As Exception When y = 0 ' Argument and When is optional Console.WriteLine(ex.Message) Finally Beep() End Try
Exception up = new Exception("Something is really wrong."); throw up; // ha ha
try { y = 0; x = 10 / y; } catch (Exception ex) { // Argument is optional, no "When" keyword Console.WriteLine(ex.Message); } finally { // Must use unmanaged MessageBeep API function to beep }
Namespaces
Namespace Harding.Compsci.Graphics ...End Namespace
' or
Namespace Harding Namespace Compsci Namespace Graphics ... End Namespace End Namespace End Namespace
Import Harding.Compsci.Graphics
namespace Harding.Compsci.Graphics { ...}
// or
namespace Harding { namespace Compsci { namespace Graphics { ... } }}
using Harding.Compsci.Graphics;
Classes / Interfaces
Accessibility keywords PublicPrivateFriend ProtectedProtected FriendShared
' InheritanceClass FootballGame Inherits Competition ...End Class
' Interface definitionInterface IAlarmClock ...End Interface
// Extending an interface Interface IAlarmClock Inherits IClock ...End Interface
// Interface implementationClass WristWatch Implements IAlarmClock, ITimer ...End Class
Accessibility keywords publicprivateinternalprotectedprotected internalstatic
// Inheritanceclass FootballGame : Competition { ...}
// Interface definitioninterface IAlarmClock { ...}
// Extending an interface interface IAlarmClock : IClock { ...}
// Interface implementationclass WristWatch : IAlarmClock, ITimer { ...}
Constructors / Destructors
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 SubEnd 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 }}
Objects
Dim hero As SuperHero = New SuperHero With hero .Name = "SpamMan" .PowerLevel = 3 End With hero.Defend("Laura Jones") hero.Rest() ' Calling Shared method' orSuperHero.Rest()
Dim hero2 As SuperHero = hero ' Both refer to 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.")
SuperHero hero = new SuperHero(); // No "With" constructhero.Name = "SpamMan"; hero.PowerLevel = 3;
hero.Defend("Laura Jones");SuperHero.Rest(); // Calling static method
SuperHero hero2 = hero; // Both refer to 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.");
Structs
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 BobConsole.WriteLine(stu2.name); // Prints Sue
Properties
Private _size As IntegerPublic 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++;
Delegates / Events
Delegate Sub MsgArrivedEventHandler(ByVal message As String)
Event MsgArrivedEvent As MsgArrivedEventHandler
' or to define an event which declares a delegate implicitlyEvent MsgArrivedEvent(ByVal message As String)
AddHandler MsgArrivedEvent, AddressOf My_MsgArrivedCallback ' Won't throw an exception if obj is NothingRaiseEvent MsgArrivedEvent("Test message") RemoveHandler MsgArrivedEvent, AddressOf My_MsgArrivedCallback
Imports System.Windows.Forms
Dim WithEvents MyButton As Button ' WithEvents can't be used on local variableMyButton = 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 nullMsgArrivedEvent -= 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); }
Console I/O
Special character constantsvbCrLf, vbCr, vbLf, vbNewLine vbNullString vbTab vbBack vbFormFeed vbVerticalTab"" Chr(65) ' Returns 'A'
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"
Escape sequences\n, \r\t\\\"
Convert.ToChar(65) // Returns 'A' - equivalent to Chr(num) in VB// or(char) 65
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);// orConsole.WriteLine(name + " is " + age + " years old.");
int c = Console.Read(); // Read single charConsole.WriteLine(c); // Prints 65 if user enters "A"
File I/O
Imports System.IO
Dim writer As StreamWriter = File.CreateText("c:\myfile.txt") writer.WriteLine("Out to file.") writer.Close()
Dim reader As StreamReader = File.OpenText("c:\myfile.txt") Dim line As String = reader.ReadLine() While Not line Is Nothing Console.WriteLine("line=" & line) line = reader.ReadLine() End While reader.Close()
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()
Dim binReader As New BinaryReader (File.OpenRead("c:\myfile.dat")) str = binReader.ReadString() num = binReader.ReadInt32() binReader.Close()
using System.IO;
StreamWriter writer = File.CreateText("c:\\myfile.txt"); writer.WriteLine("Out to file."); writer.Close();
StreamReader reader = File.OpenText("c:\\myfile.txt"); string line = reader.ReadLine(); while (line != null) { Console.WriteLine(line); line = reader.ReadLine(); } reader.Close();
string str = "Text data"; int num = 123; BinaryWriter binWriter = new BinaryWriter(File.OpenWrite("c:\\myfile.dat")); binWriter.Write(str); binWriter.Write(num); binWriter.Close();
BinaryReader binReader = new BinaryReader(File.OpenRead("c:\\myfile.dat")); str = binReader.ReadString(); num = binReader.ReadInt32(); binReader.Close();
Page last modified:
04/20/2006 16:39:28 01/14/2004 05:34:59 Please send any corrections or comments to fmccown@harding.edu.Home
|
阅读全文(3728) | 回复(3) | 编辑 | 精华 |
overload and overriable |
zj(游客)发表评论于2006/10/7 21:13:51 | Module Module1 Public Class farther Public Overridable Sub eat() MsgBox("farther eat") End Sub End Class Public Class son Inherits farther Public Overrides Sub eat() MsgBox("son eat") End Sub End Class Public Class sonson Inherits son Public Overloads Sub eat() MsgBox("sonson eat") End Sub End Class Sub Main() Dim o As farther o = New sonson o.eat() ' MsgBox("son eat") End SubEnd Module
'''''''''''''''''''''''''''''''''''''''''
Module Module1 Public Class farther Public Overridable Sub eat() MsgBox("farther eat") End Sub End Class Public Class son Inherits farther Public Overrides Sub eat() MsgBox("son eat") End Sub End Class Public Class sonson Inherits son Public Overrides Sub eat() MsgBox("sonson eat") End Sub End Class Sub Main() Dim o As farther o = New sonson o.eat() ' MsgBox("sonson eat") End SubEnd Module
|
个人主页 | 引用回复 | 主人回复 | 返回 | 编辑 | 删除 |
回复:VB.NET and C# 比较 |
shadows and overload(游客)发表评论于2006/10/5 15:17:18 | Module Module1 Public Class farther Public Sub ff() MsgBox("ss") End Sub Public Function ff(ByVal ss As Integer) MsgBox("ss" & ss) End Function
End Class Public Class son Inherits farther Public Overloads Sub ff(ByVal ss As Integer) MsgBox("son") End Sub Public Sub fff() ff() '正确 ff(1) '正确 End Sub End Class Sub Main() Dim o As son o = New son o.fff()
End Sub
End Module
Module Module1 Public Class farther Public Sub ff() MsgBox("ss") End Sub Public Function ff(ByVal ss As Integer) MsgBox("ss" & ss) End Function
End Class Public Class son Inherits farther Public Shadows Sub ff(ByVal ss As Integer) MsgBox("son") End Sub Public Sub fff() ' ff() 错误 ff(1) End Sub End Class Sub Main() Dim o As son o = New son o.fff()
End Sub
End Module
|
个人主页 | 引用回复 | 主人回复 | 返回 | 编辑 | 删除 |
回复:VB.NET and C# 比较 |
vb (游客)发表评论于2006/10/1 21:10:49 | Public Class Class1 Protected Function sun() MsgBox("hello") End FunctionEnd ClassPublic Class Class2 Inherits Class1 Friend Function suns() MyBase.sun() '可以调用
Dim ss As Class1 = New Class1 ss.sun() '不可以调用 End FunctionEnd Class
|
个人主页 | 引用回复 | 主人回复 | 返回 | 编辑 | 删除 |
» 1 »
|