Exercise 3-2. Find the code fragments involving ATypeName and turn them into a program that compiles and runs.
public class ATypeName
{
public static void Main()
{
ATypeName a = new ATypeName();
}
}
/*
mcs ATypeName.cs
// 1 warning: var 'a' value never used
mono ATypeName.exe
*/
public class ATypeName {}
will not compile in C#, although it does compile (but does not run) in Java (see Exercise_3-3 on the Thinking_in_Java_site.)
*****************************************************************************************
*****************************************************************************************
*****************************************************************************************
*****************************************************************************************
*****************************************************************************************
Exercise 3-3. Turn the DataOnly code fragments into a program that compiles and runs.
Exercise 3-4. Modify Exercise 3-3 so that the values of the data in DataOnly are assigned to and printed in Main().
public class DataOnly
{
public int i;
public float f;
public bool b;
private string s;
public static void Main()
{
DataOnly data = new DataOnly();
System.Console.WriteLine("uninitialized int: " + data.i);
System.Console.WriteLine("uninitialized float: " + data.f);
System.Console.WriteLine("uninitialized boolean: " + data.b);
System.Console.WriteLine("uninitialized string: " + data.s);
// Main() is part of DataOnly, so it has access to its private fields:
data.i = 47;
data.f = 1.1f; // 1.1 is implicitly double (compile error)
data.b = false; // true
data.s = "classified";
System.Console.WriteLine("int field: " + data.i);
System.Console.WriteLine("float field: " + data.f);
System.Console.WriteLine("boolean field: " + data.b);
System.Console.WriteLine("string field: " + data.s);
}
}
/*
mcs DataOnly.cs
mono DataOnly.exe
uninitialized int: 0
uninitialized float: 0
uninitialized boolean: False
uninitialized string:
int field: 47
float field: 1.1
boolean field: False
string field: classified
*/
*****************************************************************************************
*****************************************************************************************
*****************************************************************************************
public class TestDataOnly
{
class DataOnly // inner class
{
public int i;
public float f;
public bool b;
private string s;
}
public static void Main()
{
DataOnly data = new DataOnly();
System.Console.WriteLine("uninitialized int: " + data.i);
System.Console.WriteLine("uninitialized float: " + data.f);
System.Console.WriteLine("uninitialized boolean: " + data.b);
// Main() is not part of DataOnly, so it cannot access its private field:
// System.Console.WriteLine("uninitialized string: " + data.s); // compile error
data.i = 47;
data.f = 1.1f; // 1.1 is implicitly double (compile error)
data.b = false; // true
// data.s = "classified"; // compile error
System.Console.WriteLine("int field: " + data.i);
System.Console.WriteLine("float field: " + data.f);
System.Console.WriteLine("boolean field: " + data.b);
// System.Console.WriteLine("string field: " + data.s); // compile error
}
}
/*
mcs TestDataOnly.cs
// 1 warning: The private field `TestDataOnly.DataOnly.s' is never used
mono TestDataOnly.exe
uninitialized int: 0
uninitialized float: 0
uninitialized boolean: False
int field: 47
float field: 1.1
boolean field: False
*/