Transcript Slide 1

1
2
using
using
using
using
using
System;
System.Collections.Generic;
System.Linq;
System.Text;
System.Threading.Tasks;
namespace Decisions
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Please enter something and press Enter");
string userInputValue;
userInputValue = Console.ReadLine(); //Reading User input
Console.WriteLine("You entered {0}", userInputValue);
Console.ReadLine(); //WAITING
}
}
}
3
static void Main(string[] args)
{
Console.WriteLine("Please 1 or 2");
string userInputValue;
userInputValue = Console.ReadLine(); //READING USER INPUT
if (userInputValue == "1")
{
Console.WriteLine("You entered ONE");
}
else if (userInputValue == "2")
{
Console.WriteLine("You entered TWO");
}
else
{
Console.WriteLine("You entered SOMETHING ELSE");
}
Console.ReadLine(); //WAITING
}
4
static void Main(string[] args)
{
Console.WriteLine("Please 1 or 2");
string userInputValue;
userInputValue = Console.ReadLine(); //READING USER INPUT
string message;
if (userInputValue == "1")
{
message = "You entered ONE";
}
else if (userInputValue == "2")
message = "You entered TWO";
No {}
else
Only if it is 1 line of code, but
not recommended
{
message = "You entered SOMETHING ELSE";
}
Console.WriteLine(message);
Console.ReadLine(); //WAITING
}
5
6
7
8
== (test equality) - results true or false
= (assignment)
9
if(condition1)
{
One line does no need {} but use them anyway
}
else if(condition2)
{
}
else
{
}
10
11
DateTime dt = new DateTime(2012, 1, 17, 9, 30, 0);
string city = "Chicago";
int temp = -16;
string output = String.Format("At {0} in {1}, the temperature was {2}
degrees.", dt, city, temp);
Console.WriteLine(output);
// The example displays the following output:
//
At 1/17/2012 9:30:00 AM in Chicago, the temperature was -16 degrees.
12
C# Primitives
Type
Primitive
Usage
Range
bool
System.Boolean
boolean
true, false
byte
System.Byte
8 bit integer
0 - 255
char
System.Char
16 bit Unicode character
/u0000 - /uffff
decimal
System.Decimal
128 bit decimal
+/-1.0x10-28 to +/-7.9x10+28 precision of
28-29 digits
double
System.Double
64 bit floating point
-1.79769313486232e308 to
1.79769313486232e308
float
System.Single
32 bit floating point
+/-1.5x10-45 to +/-3.4x10+38 precision of
7 digits
int
System.Int32
32 bit integer
-2,147,483,648 to 2,147,483,647
long
System.Int64
64 bit integer
-9,223,372,036,854,775,808 to
9,223,372,036,854,775,807
sbyte
System.SByte
8 bit integer
-128 to 127
short
System.Int16
16 bit integer
-32,768 to 32,767
string
System.String
-
immutable, specified length
uint
System.UInt32
32 bit unsigned integer
0 to 4,294,967,295
ulong
System.UInt64
64 bit unsigned integer
0 to 18,446,744,073,709,551,615
ushort
System.UInt16
16 bit unsigned integer
0 to 65,535
13
shortcut
14
15
16
Prefix and Postfix Operators
17
18
19
string message =
(userInputValue == “1”)? “You entered ONE”:”You entered SOMETHING ELSE”;
20
21
22
By default int type, can be changed
23
24
25
26

In C# 3.0 and later, auto-implemented properties make
property-declaration more concise when no additional logic is
required in the property accessors.

They also enable client code to create objects. When you declare a
property as shown in the following example, the compiler creates a
private, anonymous backing field that can only be accessed through
the property

No need for getX and setX
27
// This class is mutable. Its data can be modified from outside the class.
class Customer {
// Auto-Implementated Properties for trivial get and set
public double TotalPurchases { get; set; }
public string Name { get; set; }
public int CustomerID { get; set; }
// Constructor
public Customer(double purchases, string name, int ID)
{
TotalPurchases = purchases;
Name = name;
CustomerID = ID;
}
// Methods
public string GetContactInfo() {return "ContactInfo";}
public string GetTransactionHistory() {return "History";}
// .. Additional methods, events, etc.
}
class Program
{
static void Main()
{
// Intialize a new object.
Customer cust1 = new Customer ( 4987.63, "Northwind",90108 );
//Modify a property
cust1.TotalPurchases += 499.99;
}
}
28
29
Local
variables
30
31
32
33
3 phases
34
35
36
37
// determine the average of an arbitrary number of grades
public void DetermineClassAverage()
{
int total; // sum of grades
int gradeCounter; // number of grades entered
int grade; // grade value
double average; // number with decimal point for average
// initialization phase
total = 0; // initialize total
gradeCounter = 0; // initialize loop counter
// processing phase
// prompt for and read a grade from the user
Console.Write( "Enter grade or -1 to quit: " );
grade = Convert.ToInt32( Console.ReadLine() );
Avoid infinite loop!
// loop until sentinel value is read from the user
while ( grade != -1 )
{
total = total + grade; // add grade to total
gradeCounter = gradeCounter + 1; // increment counter
// prompt for and read the next grade from the user
Console.Write( "Enter grade or -1 to quit: " );
grade = Convert.ToInt32( Console.ReadLine() );
} // end while
// termination phase
// if the user entered at least one grade...
if ( gradeCounter != 0 )
{
// calculate the average of all the grades entered
average = ( double ) total / gradeCounter;
// display the total and average (with two digits of precision)
Console.WriteLine( "\nTotal of the {0} grades entered is {1}",
gradeCounter, total );
Console.WriteLine( "Class average is {0:F}", average );
} // end if
else // no grades were entered, so output error message
Console.WriteLine( "No grades were entered" );
} // end method DetermineClassAverage
}
38
39
Explicitly and Implicitly Converting Between Simple
Types



To perform a floating-point calculation with integer values, we
temporarily treat these values as floating-point numbers.
A unary cast operator such as (double) performs explicit
conversion.
C# performs an operation called promotion (or implicit
conversion) on selected operands for use in the expression.
40

The cast operator is formed by placing parentheses around the
name of a type. This operator is a unary operator (i.e., an
operator that takes only one operand).

Cast operators associate from right to left and have the same
precedence as other unary operators, such as unary + and unary -.
This precedence is one level higher than that of the multiplicative
operators *, / and %.

In this app, the three grades entered during the sample execution of
class GradeBookTest (Fig. 5.10) total 263, which yields the average
87.66666….

The format item rounds the average to the hundredths position, and
the average is displayed as 87.67.
41
42
43
44
45
46


C# statically types at compile time. After variable declaration the type
is set
Conversion:
◦ Implicit (when it is safe)
 From smaller to larger (int to double)
 From derived to base class
◦ Explicit (cast)
 Variables compatible, but risk of precision loss (smaller to larger)
◦ Using helpers (between non-compatible types)
System.BitConverter
System.Convert
Int32.Parse
 The Convert.ToInt32(String, IFormatProvider) underneath
calls the Int32.Parse. So the only difference is that if a null string is
passed to Convert it returns 0, whereas Int32.Parse throws an
ArgumentNullException. MSDN
47
48
49
50
// Fig. 5.16: Increment.cs
// Prefix increment and postfix increment operators.
using System;
public class Increment
{
public static void Main( string[] args )
{
int c;
// demonstrate postfix increment operator
c = 5; // assign 5 to c
Console.WriteLine( c ); // display 5
Console.WriteLine( c++ ); // display 5 again, then increment
Console.WriteLine( c ); // display 6
Console.WriteLine(); // skip a line
// demonstrate prefix increment operator
c = 5; // assign 5 to c
Console.WriteLine( c ); // display 5
Console.WriteLine( ++c ); // increment then display 6
Console.WriteLine( c ); // display 6 again
} // end Main

}
51
52
53
• The table in Appendix B, Simple Types, lists the 13
simple types in C#.
• C# requires all variables to have a type.
• Instance variables of types char, byte, sbyte, short,
ushort, int, uint, long, ulong, float, double, and
decimal are all given the value 0 by default.
• Instance variables of type bool are given the value
false by default.
54