|
1.Is it possible to inline assembly or
IL in C# code? - No.
2.Is it possible to have different
access modifiers on the get/set methods
of a property? - No. The access modifier
on a property applies to both its get
and set accessors. What you need to do
if you want them to be different is make
the property read-only (by only
providing a get accessor) and create a
private/internal set method that is
separate from the property.
3.Is it possible to have a static
indexer in C#? - No. Static indexers are
not allowed in C#.
4.If I return out of a try/finally in
C#, does the code in the finally-clause
run? - Yes. The code in the finally
always runs. If you return out of the
try block, or even if you do a “goto”
out of the try, the finally block always
runs:
using System;
class main
{
public static void Main()
{
try
{
Console.WriteLine(\"In Try block\");
return;
}
finally
{
Console.WriteLine(\"In Finally block\");
}
}
} Both “In Try block” and “In Finally
block” will be displayed. Whether the
return is in the try block or after the
try-finally block, performance is not
affected either way. The compiler treats
it as if the return were outside the try
block anyway. If it’s a return without
an expression (as it is above), the IL
emitted is identical whether the return
is inside or outside of the try. If the
return has an expression, there’s an
extra store/load of the value of the
expression (since it has to be computed
within the try block).
5.I was trying to use an “out int”
parameter in one of my functions. How
should I declare the variable that I am
passing to it? - You should declare the
variable as an int, but when you pass it
in you must specify it as ‘out’, like
the following: int i; foo(out i); where
foo is declared as follows:
[return-type] foo(out int o) { }
6.How does one compare strings in C#? -
In the past, you had to call .ToString()
on the strings when using the == or !=
operators to compare the strings’
values. That will still work, but the C#
compiler now automatically compares the
values instead of the references when
the == or != operators are used on
string types. If you actually do want to
compare references, it can be done as
follows: if ((object) str1 == (object)
str2) { … } Here’s an example showing
how string compares work:
using System;
public class StringTest
{
public static void Main(string[] args)
{
Object nullObj = null; Object realObj =
new StringTest();
int i = 10;
Console.WriteLine(\"Null Object is [\" +
nullObj + \"]\n\"
+ \"Real Object is [\" + realObj +
\"]\n\"
+ \"i is [\" + i + \"]\n\");
// Show string equality operators
string str1 = \"foo\";
string str2 = \"bar\";
string str3 = \"bar\";
Console.WriteLine(\"{0} == {1} ? {2}\",
str1, str2, str1 == str2 );
Console.WriteLine(\"{0} == {1} ? {2}\",
str2, str3, str2 == str3 );
}
}
Output:
Null Object is []
Real Object is [StringTest]
i is [10]
foo == bar ? False
bar == bar ? True
7.How do you specify a custom attribute
for the entire assembly (rather than for
a class)? - Global attributes must
appear after any top-level using clauses
and before the first type or namespace
declarations. An example of this is as
follows:
using System;
[assembly : MyAttributeClass] class X {}
Note that in an IDE-created project, by
convention, these attributes are placed
in AssemblyInfo.cs.
8.How do you mark a method obsolete? -
[Obsolete] public int Foo() {...}or
[Obsolete(\"This is a message describing
why this method is obsolete\")] public
int Foo() {...}Note: The O in Obsolete
is always capitalized.
9.How do you implement thread
synchronization (Object.Wait, Notify,and
CriticalSection) in C#? - You want the
lock statement, which is the same as
Monitor Enter/Exit:
lock(obj) { // code }
translates to
try {
CriticalSection.Enter(obj);
// code
}
finally
{
CriticalSection.Exit(obj);
}
10.How do you directly call a native
function exported from a DLL? - Here’s a
quick example of the DllImport attribute
in action:
using System.Runtime.InteropServices; \
class C
{
[DllImport(\"user32.dll\")]
public static extern int MessageBoxA(int
h, string m, string c, int type);
public static int Main()
{
return MessageBoxA(0, \"Hello World!\",
\"Caption\", 0);
}
}
This example shows the minimum
requirements for declaring a C# method
that is implemented in a native DLL. The
method C.MessageBoxA() is declared with
the static and external modifiers, and
has the DllImport attribute, which tells
the compiler that the implementation
comes from the user32.dll, using the
default name of MessageBoxA. For more
information, look at the Platform Invoke
tutorial in the documentation.
11.How do I simulate optional parameters
to COM calls? - You must use the Missing
class and pass Missing.Value (in
System.Reflection) for any values that
have optional parameters. |