Set - 1

Question 6 :

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?

Answer :

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) { }

 


Question 7 :

How does one compare strings in C#?

Answer :

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


Question 8 :

How do you specify a custom attribute for the entire assembly (rather than for a class)?

Answer :

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.


Question 9 :

How do you mark a method obsolete?

Answer :

[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.


Question 10 :

How do you implement thread synchronization (Object.Wait, Notify,and CriticalSection) in C#?

Answer :

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);
}