Wednesday, December 23, 2009
Wednesday, December 16, 2009
20 most useful code snippet key words used in visual studio .net 2008
20 most useful code snippet key words used in visual studio .net 2008
Type any of the keyword followed by two tab keys ... I am sure it will help you gracefully to reduce typo. errors
01. class - to create a new empty class
02. ctor - to create an empty default constructor
03. do - to create an empty do while construct
04. exception - to create a new user defined exception
05. for - to create an empty for construct
06. forr - to create an empty reverse for construct
07. foreach - to create an empty foreach construct
08. if - to create an empty if block
09. interface - to create an empty interface
10. mbox - to add MessageBox.Show()
11. namespace - to create a new namespace
12. propg - to add a "get" accessor and a private "set" accessor
13. sim - to add static int Main()
14. struct - to create an empty structure
15. svm - to add static void Main()
16. switch - to add an empty switch block
17. try - to add an empty try block
18. tryf - to add an emptry try...finally block
19. while - to crate an empty while construct
20. ~ - to create an empty destructor
Happy .net programmin
Type any of the keyword followed by two tab keys ... I am sure it will help you gracefully to reduce typo. errors
01. class - to create a new empty class
02. ctor - to create an empty default constructor
03. do - to create an empty do while construct
04. exception - to create a new user defined exception
05. for - to create an empty for construct
06. forr - to create an empty reverse for construct
07. foreach - to create an empty foreach construct
08. if - to create an empty if block
09. interface - to create an empty interface
10. mbox - to add MessageBox.Show()
11. namespace - to create a new namespace
12. propg - to add a "get" accessor and a private "set" accessor
13. sim - to add static int Main()
14. struct - to create an empty structure
15. svm - to add static void Main()
16. switch - to add an empty switch block
17. try - to add an empty try block
18. tryf - to add an emptry try...finally block
19. while - to crate an empty while construct
20. ~ - to create an empty destructor
Happy .net programmin
Tuesday, October 20, 2009
Saturday, October 03, 2009
Friday, October 02, 2009
Swap value of two variables without using third variable(.NET)
int a, b;
a = 10;
b = 20;
Console.WriteLine("Before Swapping a="+a+" b="+b);
a = a + b;
b = a - b;
a = a - b;
Console.WriteLine("After Swapping a=" + a + " b=" + b);
a = 10;
b = 20;
Console.WriteLine("Before Swapping a="+a+" b="+b);
a = a + b;
b = a - b;
a = a - b;
Console.WriteLine("After Swapping a=" + a + " b=" + b);
Friday, September 25, 2009
Using in .NET
Using .NET
Introduction
I was at work today, and someone asked me what happens when you use the using keyword in C#. Most people will tell you that it is something you use that will clean up any unmanaged resources for the specified object, which is not incorrect. But what actually happens at the IL level? How does it "clean up" unmanaged resources? I had my assumptions, but I really didn't know. So, I set out to find out for myself.
Tests
I decided I was going to run through a couple of tests:
Test #1
I wanted to see what the generated MSIL code looks like when I use the using keyword. So, I wrote some very simple sample code in C#, compiled it, then I decompiled it using ILDASM to see the MSIL code.
Test #2
I wanted to see if I could write code without using the using keyword that would generate the exact same MSIL code. This process was a little more trial and error, but was fairly easy.
Test #1
Here is my sample code:
Collapse Copy Code
[STAThread]
private static void Main(string[] args)
{
using (Bitmap bitmap1 = new Bitmap(100, 100))
{
Console.WriteLine("Width: {0}, Height: {1}", bitmap1.Width, bitmap1.Height);
}
Console.ReadLine();
}
As you can see... nothing special in the code. Create a new Bitmap inside a using statement, write some output to the console, wait for user input, then exit.
What does this look like when we build the app, then decompile it into MSIL? Check it out:
Collapse Copy Code
.method private hidebysig static void Main(string[] args) cil managed
{
.custom instance void [mscorlib]System.STAThreadAttribute::.ctor()
.entrypoint
.maxstack 4
.locals init (
[0] [System.Drawing]System.Drawing.Bitmap bitmap1)
L_0000: ldc.i4.s 100
L_0002: ldc.i4.s 100
L_0004: newobj instance void
[System.Drawing]System.Drawing.Bitmap::.ctor(int32, int32)
L_0009: stloc.0
L_000a: ldstr "Width: {0}, Height: {1}"
L_000f: ldloc.0
L_0010: callvirt instance int32 [System.Drawing]System.Drawing.Image::get_Width()
L_0015: box int32
L_001a: ldloc.0
L_001b: callvirt instance int32 [System.Drawing]System.Drawing.Image::get_Height()
L_0020: box int32
L_0025: call void [mscorlib]System.Console::WriteLine(string, object, object)
L_002a: leave.s L_0036
L_002c: ldloc.0
L_002d: brfalse.s L_0035
L_002f: ldloc.0
L_0030: callvirt instance void [mscorlib]System.IDisposable::Dispose()
L_0035: endfinally
L_0036: call string [mscorlib]System.Console::ReadLine()
L_003b: pop
L_003c: ret
.try L_000a to L_002c finally handler L_002c to L_0036
}
Test #1 Results
So the results from test #1 are interesting. The using keyword is basically a try - finally block, without a catch , where IDisposable.Dispose() is called in the finally . One interesting thing to note is that the Bitmap constructor is called before the try block begins. This tells me that if, in the Bitmap constructor, an unmanaged resource is allocated, but not freed, then the constructor throws an exception, the unmanaged resource will not get freed by a call to the IDisposable.Dispose(). This also assumes that the IDisposable is implemented properly. Therefore the using keyword is useless if the IDisposable is not implemented properly. The constructor should clean up resources if it fails, and the Dispose() method should clean up all unmanaged resources. Chances are good that Microsoft has implemented IDisposable correctly in their classes, so watch out for this if you are implementing your own IDisposable.
Test #2
Based on the MSIL code that resulted from Test #1, I decided to write the same code using try - finally blocks. This is what I came up with:
Collapse Copy Code
[STAThread]
private static void Main(string[] args)
{
Bitmap bitmap1 = new Bitmap(100, 100);
try
{
Console.WriteLine("Width: {0}, Height: {1}", bitmap1.Width, bitmap1.Height);
}
finally
{
if (bitmap1 != null)
{
bitmap1.Dispose();
}
}
Console.ReadLine();
}
And this is what it looked like in MSIL:
Collapse Copy Code
.method private hidebysig static void Main(string[] args) cil managed
{
.custom instance void [mscorlib]System.STAThreadAttribute::.ctor()
.entrypoint
.maxstack 4
.locals init (
[0] [System.Drawing]System.Drawing.Bitmap bitmap1)
L_0000: ldc.i4.s 100
L_0002: ldc.i4.s 100
L_0004: newobj instance void
[System.Drawing]System.Drawing.Bitmap::.ctor(int32, int32)
L_0009: stloc.0
L_000a: ldstr "Width: {0}, Height: {1}"
L_000f: ldloc.0
L_0010: callvirt instance int32 [System.Drawing]System.Drawing.Image::get_Width()
L_0015: box int32
L_001a: ldloc.0
L_001b: callvirt instance int32 [System.Drawing]System.Drawing.Image::get_Height()
L_0020: box int32
L_0025: call void [mscorlib]System.Console::WriteLine(string, object, object)
L_002a: leave.s L_0036
L_002c: ldloc.0
L_002d: brfalse.s L_0035
L_002f: ldloc.0
L_0030: callvirt instance void [System.Drawing]System.Drawing.Image::Dispose()
L_0035: endfinally
L_0036: call string [mscorlib]System.Console::ReadLine()
L_003b: pop
L_003c: ret
.try L_000a to L_002c finally handler L_002c to L_0036
}
Test #2 Results
It is almost exactly like the MSIL generated from the using keyword, except this calls Image.Dispose() rather than IDisposable.Dispose(), but the effect is the same. Just for fun, I regenerated C# code using Lutz Roeder's .NET Reflector, which is an invaluable tool, and here is the result:
Collapse Copy Code
[STAThread]
private static void Main(string[] args)
{
using (Bitmap bitmap1 = new Bitmap(100, 100))
{
Console.WriteLine("Width: {0}, Height: {1}", bitmap1.Width, bitmap1.Height);
}
Console.ReadLine();
}
This looks exactly like our original code!!!
Conclusion
This was really a fun experiment that revealed a lot about the way .NET works behind the scenes. I hope you guys enjoy this as much as I did.
Courtesy: http://www.codeproject.com/KB/cs/CSharp_using.aspx, Peter Femiani
Introduction
I was at work today, and someone asked me what happens when you use the using keyword in C#. Most people will tell you that it is something you use that will clean up any unmanaged resources for the specified object, which is not incorrect. But what actually happens at the IL level? How does it "clean up" unmanaged resources? I had my assumptions, but I really didn't know. So, I set out to find out for myself.
Tests
I decided I was going to run through a couple of tests:
Test #1
I wanted to see what the generated MSIL code looks like when I use the using keyword. So, I wrote some very simple sample code in C#, compiled it, then I decompiled it using ILDASM to see the MSIL code.
Test #2
I wanted to see if I could write code without using the using keyword that would generate the exact same MSIL code. This process was a little more trial and error, but was fairly easy.
Test #1
Here is my sample code:
Collapse Copy Code
[STAThread]
private static void Main(string[] args)
{
using (Bitmap bitmap1 = new Bitmap(100, 100))
{
Console.WriteLine("Width: {0}, Height: {1}", bitmap1.Width, bitmap1.Height);
}
Console.ReadLine();
}
As you can see... nothing special in the code. Create a new Bitmap inside a using statement, write some output to the console, wait for user input, then exit.
What does this look like when we build the app, then decompile it into MSIL? Check it out:
Collapse Copy Code
.method private hidebysig static void Main(string[] args) cil managed
{
.custom instance void [mscorlib]System.STAThreadAttribute::.ctor()
.entrypoint
.maxstack 4
.locals init (
[0] [System.Drawing]System.Drawing.Bitmap bitmap1)
L_0000: ldc.i4.s 100
L_0002: ldc.i4.s 100
L_0004: newobj instance void
[System.Drawing]System.Drawing.Bitmap::.ctor(int32, int32)
L_0009: stloc.0
L_000a: ldstr "Width: {0}, Height: {1}"
L_000f: ldloc.0
L_0010: callvirt instance int32 [System.Drawing]System.Drawing.Image::get_Width()
L_0015: box int32
L_001a: ldloc.0
L_001b: callvirt instance int32 [System.Drawing]System.Drawing.Image::get_Height()
L_0020: box int32
L_0025: call void [mscorlib]System.Console::WriteLine(string, object, object)
L_002a: leave.s L_0036
L_002c: ldloc.0
L_002d: brfalse.s L_0035
L_002f: ldloc.0
L_0030: callvirt instance void [mscorlib]System.IDisposable::Dispose()
L_0035: endfinally
L_0036: call string [mscorlib]System.Console::ReadLine()
L_003b: pop
L_003c: ret
.try L_000a to L_002c finally handler L_002c to L_0036
}
Test #1 Results
So the results from test #1 are interesting. The using keyword is basically a try - finally block, without a catch , where IDisposable.Dispose() is called in the finally . One interesting thing to note is that the Bitmap constructor is called before the try block begins. This tells me that if, in the Bitmap constructor, an unmanaged resource is allocated, but not freed, then the constructor throws an exception, the unmanaged resource will not get freed by a call to the IDisposable.Dispose(). This also assumes that the IDisposable is implemented properly. Therefore the using keyword is useless if the IDisposable is not implemented properly. The constructor should clean up resources if it fails, and the Dispose() method should clean up all unmanaged resources. Chances are good that Microsoft has implemented IDisposable correctly in their classes, so watch out for this if you are implementing your own IDisposable.
Test #2
Based on the MSIL code that resulted from Test #1, I decided to write the same code using try - finally blocks. This is what I came up with:
Collapse Copy Code
[STAThread]
private static void Main(string[] args)
{
Bitmap bitmap1 = new Bitmap(100, 100);
try
{
Console.WriteLine("Width: {0}, Height: {1}", bitmap1.Width, bitmap1.Height);
}
finally
{
if (bitmap1 != null)
{
bitmap1.Dispose();
}
}
Console.ReadLine();
}
And this is what it looked like in MSIL:
Collapse Copy Code
.method private hidebysig static void Main(string[] args) cil managed
{
.custom instance void [mscorlib]System.STAThreadAttribute::.ctor()
.entrypoint
.maxstack 4
.locals init (
[0] [System.Drawing]System.Drawing.Bitmap bitmap1)
L_0000: ldc.i4.s 100
L_0002: ldc.i4.s 100
L_0004: newobj instance void
[System.Drawing]System.Drawing.Bitmap::.ctor(int32, int32)
L_0009: stloc.0
L_000a: ldstr "Width: {0}, Height: {1}"
L_000f: ldloc.0
L_0010: callvirt instance int32 [System.Drawing]System.Drawing.Image::get_Width()
L_0015: box int32
L_001a: ldloc.0
L_001b: callvirt instance int32 [System.Drawing]System.Drawing.Image::get_Height()
L_0020: box int32
L_0025: call void [mscorlib]System.Console::WriteLine(string, object, object)
L_002a: leave.s L_0036
L_002c: ldloc.0
L_002d: brfalse.s L_0035
L_002f: ldloc.0
L_0030: callvirt instance void [System.Drawing]System.Drawing.Image::Dispose()
L_0035: endfinally
L_0036: call string [mscorlib]System.Console::ReadLine()
L_003b: pop
L_003c: ret
.try L_000a to L_002c finally handler L_002c to L_0036
}
Test #2 Results
It is almost exactly like the MSIL generated from the using keyword, except this calls Image.Dispose() rather than IDisposable.Dispose(), but the effect is the same. Just for fun, I regenerated C# code using Lutz Roeder's .NET Reflector, which is an invaluable tool, and here is the result:
Collapse Copy Code
[STAThread]
private static void Main(string[] args)
{
using (Bitmap bitmap1 = new Bitmap(100, 100))
{
Console.WriteLine("Width: {0}, Height: {1}", bitmap1.Width, bitmap1.Height);
}
Console.ReadLine();
}
This looks exactly like our original code!!!
Conclusion
This was really a fun experiment that revealed a lot about the way .NET works behind the scenes. I hope you guys enjoy this as much as I did.
Courtesy: http://www.codeproject.com/KB/cs/CSharp_using.aspx, Peter Femiani
Monday, September 21, 2009
Friday, September 18, 2009
Saturday, July 04, 2009
Thursday, July 02, 2009
Thursday, June 04, 2009
Wednesday, June 03, 2009
Tuesday, June 02, 2009
Wednesday, April 29, 2009
Monday, February 09, 2009
Free .NET ebook download
www.free-ebooks-download.org
Website to download latest free e-books on C#, vb.net, asp.net, 2.0, ado.net, sql 2005, web services, ajax, .net framework, compact framework, xml, sharepoint, exchange server, seo, crystal reports and more.. All free ebooks download, Hurry!
Website to download latest free e-books on C#, vb.net, asp.net, 2.0, ado.net, sql 2005, web services, ajax, .net framework, compact framework, xml, sharepoint, exchange server, seo, crystal reports and more.. All free ebooks download, Hurry!
Subscribe to:
Posts (Atom)