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