|
1.Are private class-level variables
inherited? - Yes, but they are not
accessible, so looking at it you can
honestly say that they are not
inherited. But they are.
2.Why does DllImport not work for me? -
All methods marked with the DllImport
attribute must be marked as public
static extern.
3.Why does my Windows application pop up
a console window every time I run it? -
Make sure that the target type set in
the project properties setting is set to
Windows Application, and not Console
Application. If you’re using the command
line, compile with /target:winexe, not /target:exe.
4.Why do I get an error (CS1006) when
trying to declare a method without
specifying a return type? - If you leave
off the return type on a method
declaration, the compiler thinks you are
trying to declare a constructor. So if
you are trying to declare a method that
returns nothing, use void. The following
is an example: // This results in a
CS1006 error public static staticMethod
(mainStatic obj) // This will work as
wanted public static void staticMethod (mainStatic
obj)
5.Why do I get a syntax error when
trying to declare a variable called
checked? - The word checked is a keyword
in C#.
6.Why do I get a security exception when
I try to run my C# app? - Some security
exceptions are thrown if you are working
on a network share. There are some parts
of the frameworks that will not run if
being run off a share (roaming profile,
mapped drives, etc.). To see if this is
what’s happening, just move the
executable over to your local drive and
see if it runs without the exceptions.
One of the common exceptions thrown
under these conditions is
System.Security.SecurityException. To
get around this, you can change your
security policy for the intranet zone,
code group 1.2, (the zone that running
off shared folders falls into) by using
the caspol.exe tool.
7.Why do I get a CS5001: does not have
an entry point defined error when
compiling? - The most common problem is
that you used a lowercase ‘m’ when
defining the Main method. The correct
way to implement the entry point is as
follows: class test { static void
Main(string[] args) {} }
8.What optimizations does the C#
compiler perform when you use the
/optimize+ compiler option? - The
following is a response from a developer
on the C# compiler team: We get rid of
unused locals (i.e., locals that are
never read, even if assigned). We get
rid of unreachable code. We get rid of
try-catch with an empty try. We get rid
of try-finally with an empty try. We get
rid of try-finally with an empty
finally. We optimize branches over
branches: gotoif A, lab1 goto lab2:
lab1: turns into: gotoif !A, lab2 lab1:
We optimize branches to ret, branches to
next instruction, and branches to
branches.
9.What is the syntax for calling an
overloaded constructor within a
constructor (this() and constructorname()
does not compile)? - The syntax for
calling another constructor is as
follows: class B { B(int i) { } } class
C : B { C() : base(5) // call base
constructor B(5) { } C(int i) : this()
// call C() { } public static void
Main() {} }
10.What is the equivalent to regsvr32
and regsvr32 /u a file in .NET
development? - Try using RegAsm.exe.
Search MSDN on Assembly Registration
Tool.
11.What is the difference between a
struct and a class in C#? - From
language spec: The list of similarities
between classes and structs is as
follows. Longstructs can implement
interfaces and can have the same kinds
of members as classes. Structs differ
from classes in several important ways;
however, structs are value types rather
than reference types, and inheritance is
not supported for structs. Struct values
are stored on the stack or in-line.
Careful programmers can sometimes
enhance performance through judicious
use of structs. For example, the use of
a struct rather than a class for a Point
can make a large difference in the
number of memory allocations performed
at runtime. The program below creates
and initializes an array of 100 points.
With Point implemented as a class, 101
separate objects are instantiated-one
for the array and one each for the 100
elements.
12.My switch statement works differently
than in C++! Why? - C# does not support
an explicit fall through for case
blocks. The following code is not legal
and will not compile in C#:
switch(x)
{
case 0: // do something
case 1: // do something as continuation
of case 0
default: // do something in common with
//0, 1 and everything else
break;
}
To achieve the same effect in C#, the
code must be modified as shown below
(notice how the control flows are
explicit):
class Test
{
public static void Main() {
int x = 3;
switch(x)
{
case 0: // do something
goto case 1;
case 1: // do something in common with 0
goto default;
default: // do something in common with
0, 1, and anything else
break;
}
}
}
13.Is there regular expression (regex)
support available to C# developers? -
Yes. The .NET class libraries provide
support for regular expressions. Look at
the System.Text.RegularExpressions
namespace.
14.Is there any sample C# code for
simple threading? - Yes:
using System;
using System.Threading;
class ThreadTest
{
public void runme()
{
Console.WriteLine(\"Runme Called\");
}
public static void Main(String[] args)
{
ThreadTest b = new ThreadTest();
Thread t = new Thread(new
ThreadStart(b.runme));
t.Start();
}
}
15.Is there an equivalent of exit() for
quitting a C# .NET application? - Yes,
you can use System.Environment.Exit(int
exitCode) to exit the application or
Application.Exit() if it’s a Windows
Forms app.
16.Is there a way to force garbage
collection? - Yes. Set all references to
null and then call System.GC.Collect().
If you need to have some objects
destructed, and System.GC.Collect()
doesn’t seem to be doing it for you, you
can force finalizers to be run by
setting all the references to the object
to null and then calling
System.GC.RunFinalizers().
17.Is there a way of specifying which
block or loop to break out of when
working with nested loops? - The easiest
way is to use goto:
using System;
class BreakExample
{
public static void Main(String[] args) {
for(int i=0; i<3; i++)
{
Console.WriteLine(\"Pass {0}: \", i);
for( int j=0 ; j<100 ; j++ )
{
if ( j == 10)
goto done;
Console.WriteLine(\"{0} \", j);
}
Console.WriteLine(\"This will not
print\");
}
done:
Console.WriteLine(\"Loops complete.\");
}
}
Is it possible to restrict the scope of
a field/method of a class to the classes
in the same namespace? - There is no way
to restrict to a namespace. Namespaces
are never units of protection. But if
you’re using assemblies, you can use the
‘internal’ access modifier to restrict
access to only within the assembly. |