+ All Categories

C#/.NET

Date post: 06-Jan-2016
Category:
Upload: garson
View: 42 times
Download: 0 times
Share this document with a friend
Description:
C#/.NET. Basics. .NET. Runtime environment called the Common Language Runtime (CLR) Class library called the Framework Class Library (FCL). Common Language Runtime. Modern runtime environment .NET compilers do not target a specific processor The CLR must be present on the target machine - PowerPoint PPT Presentation
Popular Tags:
57
Carnegie Mellon Universit y MSCF 1 C#/.NET Basics
Transcript
Page 1: C#/.NET

Carnegie Mellon University MSCF 1

C#/.NET

Basics

Page 2: C#/.NET

Carnegie Mellon University MSCF 2

.NET

• Runtime environment called the Common Language Runtime (CLR)

• Class library called the Framework Class Library (FCL)

Page 3: C#/.NET

Carnegie Mellon University MSCF 3

Common Language Runtime

• Modern runtime environment• .NET compilers do not target a specific

processor • The CLR must be present on the target

machine• Safely manages code execution• JIT compilation from MSIL to machine

executable• Security and Permission management

Page 4: C#/.NET

Carnegie Mellon University MSCF 4

Framework Class Library

• Object oriented• Collections, console, network and file I/O• Database and XML support• Rich server side event model• Rich client side support for GUI construction• Support for building SOAP based web services• More than 3,500 classes

Page 5: C#/.NET

Carnegie Mellon University MSCF 5

C# Overview

• C# is type safe (hard to access objects in inappropriate ways)

• Automatic memory management

• Exception handling

• Array bounds checking

• Support for checked arithmetic

Page 6: C#/.NET

Carnegie Mellon University MSCF 6

// Hello World 1 in C#

class MyApp {

public static void Main() {

System.String x = "World"; System.Console.WriteLine("Hello " + x); }}

Compile withcsc -t:exe -out:HelloUser.exe -r:MSCorLib.dll HelloUser.csExecute MSIL Managed Code withHelloUserThe code runs within the Common Language Runtime (CLR)

MSCorLib.dll is oneamong many assemblieswe can include. The Basic Class Library isspread over a couple of assemblies.

MyApp is in theglobal namespace

Hello World 1 Full Namespaces

The .exe file has bootstrap code to runthe .NET run time.

Page 7: C#/.NET

Carnegie Mellon University MSCF 7

// Hello World 2 in C#using System;

class MyApp {

public static void Main() {

String x = "World 2"; Console.WriteLine("Hello " + x); }}

Compile Withcsc HelloUser.csExecute The MS Intermediate Language .exe file withHelloUser

Hello World 2 Using System

Page 8: C#/.NET

Carnegie Mellon University MSCF 8

// Hello World 3 in C#class MyApp {

public static void Main() {

String x = "World 3"; Console.WriteLine("Hello " + x); }}

HelloUser.cs(9,7): error CS0246: The type or namespace name 'String' could not be found (are you missing a using directive or an assembly reference?)And more errors…

Hello World 3 Without System

Page 9: C#/.NET

Carnegie Mellon University MSCF 9

Code May Come From A Network

• Has it been tampered with?

• Who wrote it?

• What permissions does it require?

• What permissions should we grant it?

• A major advantage of .NET over traditional

Windows applications is fined-grained control over security.

Page 10: C#/.NET

Carnegie Mellon University MSCF 10

Signing Hello World 4 (1) My Path Variable:

C:\WINDOWS\system32;C:\WINDOWS\Microsoft.NET\Framework\v1.0.3705;C:\Program Files\Microsoft Visual Studio .NET\FrameworkSDK\Bin

(1)Generate 128-byte public/private key pair and place in a file sn.exe –k PublicPrivate.snk

(2) Add an attribute to the source so that the compiler places the public key in the executable, generates a hash and signs it.

(3) Signature verification is automatic but may be done manually with - sn.exe -v MyApp.exe

(4) Verification is done against the public key in the executable and not against the public key in PublicPrivate.snk

Page 11: C#/.NET

Carnegie Mellon University MSCF 11

Signing Hello World 4 (2) // Hello World 4 in C# (with a signature)

using System.Reflection;

// Tell the compiler where the public/private key pair reside[assembly:AssemblyKeyFile("PublicPrivate.snk")]

class MyApp {

public static void Main() {

System.String x = "World"; System.Console.WriteLine("Hello " + x); }}

Page 12: C#/.NET

Carnegie Mellon University MSCF 12

Signing Hello World 4 (3) Create the keys

D:\McCarthy\www\46-690\SignAnAssembly>sn.exe -k PublicPrivate.snk

Key pair written to PublicPrivate.snk

Compile code

D:\McCarthy\www\46-690\SignAnAssembly>csc MyApp.cs

Verification is automatic but here we force it

D:\McCarthy\www\46-690\SignAnAssembly>sn.exe -v MyApp.exe

Assembly 'MyApp.exe' is valid

Page 13: C#/.NET

Carnegie Mellon University MSCF 13

Type System Unification 0

• The object class is the ultimate base class for both reference types and value types

• Simple types in C# alias structs found in System

• So, Simple types have methods int i = 3; string s = i.ToString();• But follow the same semantics as simple

types of old, e.g., i = 3; j = i; j = 2; // i still 3

Page 14: C#/.NET

Carnegie Mellon University MSCF 14

class MyMathApp {

public static void Main() {

float x = 2.3F; // Semantics are the same System.Single y = 1.0F; // Only the syntax differs

float z = x + y;

System.Console.WriteLine("Result = " + z); }}

Type System Unification 1

Page 15: C#/.NET

Carnegie Mellon University MSCF 15

// All types derive from System.Object (which corresponds to the primitive object// type.)class MyMathApp {

public static void Main() {

float x = 2.3F; // 2.3 is a double so use 'F' for float System.Single y = 1.0F; float z = x + y; object o = z; // object is part of C#, Object is in System System.Console.WriteLine("Object Result = " + o); }}

Object Result = 3.3

Type System Unification 2

Page 16: C#/.NET

Carnegie Mellon University MSCF 16

Exception Handling (1)// Exception Handling - loops foreverusing System;class CatchExceptionExample { public static void Main() { int result = 1; try { while(true) { result = result * 2; } } catch(Exception e) { Console.WriteLine("Exception caught"); Console.WriteLine(e.Message); } Console.WriteLine("Graceful termination"); }}

Page 17: C#/.NET

Carnegie Mellon University MSCF 17

Exception Handling (2)// Exception Handling - Graceful terminationusing System;class CatchExceptionExample { public static void Main() { int result = 1; try { while(true) { result = checked(result * 2); } } catch(Exception e) { Console.WriteLine("Exception caught"); Console.WriteLine(e.Message); } Console.WriteLine("Graceful termination"); }}

Page 18: C#/.NET

Carnegie Mellon University MSCF 18

Exception Handling (3)

D:>CatchExceptionExample.exe

Exception caught

Arithmetic operation resulted in an overflow.

Graceful termination

Page 19: C#/.NET

Carnegie Mellon University MSCF 19

Parameters1 Pass By Value// C# Parameters

using System; public class Parameter1 {

static void inc(int x) { ++x; }

public static void Main() {

int a = 30; inc(a); Console.WriteLine(a); // 30 is displayed } }

Page 20: C#/.NET

Carnegie Mellon University MSCF 20

Parameters 2 Pass by Reference

// C# Parameters 2

using System; public class Parameter2 {

static void inc(ref int x) { ++x; }

public static void Main() {

int a = 30; inc(ref a); Console.WriteLine(a); // 31 is displayed } }

Page 21: C#/.NET

Carnegie Mellon University MSCF 21

Parameters 3 Passing Objects// C# Parameters

using System;

public class Student { public int age;} public class Parameter3 {

static void swap(Student x, Student y) { Student t = x; x = y; y = t; }

Page 22: C#/.NET

Carnegie Mellon University MSCF 22

public static void Main() {

Student a = new Student(); a.age = 34; Student b = new Student(); b.age = 65; swap(a,b); Console.WriteLine(a.age +" " +b.age); // 34 65 } }

Page 23: C#/.NET

Carnegie Mellon University MSCF 23

Parameter 4 Passing Objects// C# Parametersusing System;

public class Student { public int age;} public class Parameter4 {

static void swap(ref Student x, ref Student y) { Student t = x; x = y; y = t; }

Page 24: C#/.NET

Carnegie Mellon University MSCF 24

public static void Main() {

Student a = new Student(); a.age = 34; Student b = new Student(); b.age = 65; swap(ref a,ref b); Console.WriteLine(a.age +" " +b.age); // 65 34 } }

Page 25: C#/.NET

Carnegie Mellon University MSCF 25

Parameters 5 Out Parameters// C# Parameters

using System;

public class Student { public int age;} public class Parameter5 {

static void MakeAStudent(out Student x) { x = new Student(); // assignment is required }

Page 26: C#/.NET

Carnegie Mellon University MSCF 26

public static void Main() {

Student a; MakeAStudent(out a); a.age = 34; Console.WriteLine(a.age); // 35 is displayed } }

Page 27: C#/.NET

Carnegie Mellon University MSCF 27

Parameter 6 Passing Arrays// C# Parameters

using System; public class Parameter6 {

static decimal Multiply(params decimal[] a) { decimal amt = 0.0m; foreach(decimal i in a) amt += i; return amt; }

Page 28: C#/.NET

Carnegie Mellon University MSCF 28

public static void Main() {

decimal[] x = { 2.0m, 3.0m, 1.0m }; Console.WriteLine(Multiply(x)); // 6.0 is displayed } }

Page 29: C#/.NET

Carnegie Mellon University MSCF 29

// Classes may have members with protection levels// The default is private.class Student { public string name; int age;

public Student(string n, int a) { name = n; age = a; }}class MyClassApp {

public static void Main() { Student s = new Student("Mike",23); System.Console.WriteLine("Student " + s.name); // illegal to try to display the age from here }}

Classes 1

Page 30: C#/.NET

Carnegie Mellon University MSCF 30

internal class Student {

public string name; int age; public Student(string n, int a) { // Classes default to 'internal' visibility. name = n; // MyClassApp is public and therefore age = a; // visible to external // assemblies. }}public class MyClassApp {

public static void Main() { Student s = new Student("Mike",23); System.Console.WriteLine("Student " + s); }}

Student Student

Classes 2

Page 31: C#/.NET

Carnegie Mellon University MSCF 31

using System;

class Student {

private string name; private int age;

public String StudentName { set { name = value; } get { return name; } }

Classes 3 Properties

Page 32: C#/.NET

Carnegie Mellon University MSCF 32

public int StudentAge { set { age = value; } get { return age; } }} public class MyClassApp {

public static void Main() {

Student s = new Student(); s.StudentName = "Mike"; // calls set s.StudentAge = 23; // calls set // call get Console.WriteLine(s.StudentName + ":" + s.StudentAge); }}Mike:23

Page 33: C#/.NET

Carnegie Mellon University MSCF 33

Classes 4 Inheritance// C# Classes and Inheritance

using System;

class Student {

private string name; private int age;

public String StudentName { set { name = value; } get { return name; } }

Page 34: C#/.NET

Carnegie Mellon University MSCF 34

public int StudentAge { set { age = value; } get { return age; } } }

Page 35: C#/.NET

Carnegie Mellon University MSCF 35

class GradStudent : Student {

private String underGraduateDegree; public String Degree { set { underGraduateDegree = value; } get { return underGraduateDegree; } }}

Page 36: C#/.NET

Carnegie Mellon University MSCF 36

public class DemoInheritance {

public static void Main() {

GradStudent s = new GradStudent(); s.StudentName = "Mike"; s.StudentAge = 23; s.Degree = "Philosophy";

Console.WriteLine(s.StudentName + ":" + s.StudentAge + ":" + s.Degree); }}

Mike:23:Philosophy

Page 37: C#/.NET

Carnegie Mellon University MSCF 37

Classes 5 Polymorphism// C# Classes and Polymorphism

using System;

public class Student {

private string name; private int age;

public String StudentName { set { name = value; } get { return name; } }

Page 38: C#/.NET

Carnegie Mellon University MSCF 38

public int StudentAge { set { age = value; } get { return age; } } }

Page 39: C#/.NET

Carnegie Mellon University MSCF 39

public class GradStudent : Student {

private String underGraduateDegree; public String Degree { set { underGraduateDegree = value; } get { return underGraduateDegree; } }}

Page 40: C#/.NET

Carnegie Mellon University MSCF 40

public class DoctoralStudent : GradStudent {

private String thesisTitle; public String ThesisTitle { get { return thesisTitle; } }

public DoctoralStudent(string thesis) { thesisTitle = thesis; }}

Page 41: C#/.NET

Carnegie Mellon University MSCF 41

public class DemoInheritance {

public static void Main() {

GradStudent s = new GradStudent(); DoctoralStudent d = new DoctoralStudent("The Semantic Web"); s.StudentName = "Mike"; s.StudentAge = 23; d.StudentName = "Sue"; d.StudentAge = 25; Console.WriteLine(s.StudentName + ":" + s.StudentAge); Console.WriteLine(d.StudentName + ":" + d.StudentAge);

Display(s); Display(d); } public static void Display(Student x) { // Method takes any Student Console.WriteLine(x.StudentName + ":" + x.StudentAge); } }

Page 42: C#/.NET

Carnegie Mellon University MSCF 42

// Classes may have "Type Constructors"

internal class Student {

public static int numberOfStudentsCreated;

static Student() { // must take no args numberOfStudentsCreated = 0; }

public string name; int age;

public Student(string n, int a) { name = n; age = a; numberOfStudentsCreated++; }}

Type Constructors 1

Page 43: C#/.NET

Carnegie Mellon University MSCF 43

public class MyClassApp {

public static void Main() {

Student s = new Student("Mike",23); Student t = new Student("Sue",23);

System.Console.WriteLine("Student's created = " + Student.numberOfStudentsCreated);

}}

HelloUserStudent's created = 2

Page 44: C#/.NET

Carnegie Mellon University MSCF 44

GUI Programming (1)using System;

using System.Windows.Forms;

public class WindowGreeting {

private String m_userName; public String UserName {

set { m_userName = value; } get { return m_userName; } }

Page 45: C#/.NET

Carnegie Mellon University MSCF 45

public void Greet() {

MessageBox.Show("Hello " + m_userName); }

public static void Main(String[] a) {

WindowGreeting wg = new WindowGreeting(); wg.UserName = "Mike"; wg.Greet(); }}

Page 46: C#/.NET

Carnegie Mellon University MSCF 46

Page 47: C#/.NET

Carnegie Mellon University MSCF 47

GUI Programming (2)

csc -r:System.Windows.Forms.dll NewOne.cs

NewOne

The escape key works too.

Page 48: C#/.NET

Carnegie Mellon University MSCF 48

GUI Programming (2)using System;using System.Drawing;using System.Windows.Forms;

// Inherit from Form to control window

public class WindowGreeting : Form {

private String m_userName; private Button m_btnClose; private Label m_label;

public WindowGreeting() {

Console.WriteLine("constructing"); m_label = new Label(); m_label.Location = new Point(16,16); m_label.Size = new Size(136,24); m_label.Text = "";

Page 49: C#/.NET

Carnegie Mellon University MSCF 49

m_btnClose = new Button(); m_btnClose.Location = new Point(48,50); m_btnClose.Size = new Size(56,24); m_btnClose.Text = "Discard"; m_btnClose.Click += new EventHandler(CloseButton_Click); this.Controls.Add(m_label); this.Controls.Add(m_btnClose);

this.ClientSize = new Size(150, 90);

this.CancelButton = m_btnClose;

}

Page 50: C#/.NET

Carnegie Mellon University MSCF 50

void CloseButton_Click(Object sender, EventArgs e) { this.Close(); }

public String UserName {

set { m_userName = value; } get { return m_userName; } } public static void Main(String[] a) { WindowGreeting wg = new WindowGreeting(); wg.ShowDialog(); }}

Page 51: C#/.NET

Carnegie Mellon University MSCF 51

Networking 1 Visit a Web Site// Snarf.cs from C# in a Nutshell// Snarf.exe http://www.oreilly.com/catalog/csharpnut

using System;using System.IO;using System.Net;using System.Text;

class Snarf {

static void Main(String[] args) {

// args[0] holds a URL from the command line WebRequest req = WebRequest.Create(args[0]); WebResponse resp = req.GetResponse();

Page 52: C#/.NET

Carnegie Mellon University MSCF 52

// read the data from the URL Stream s = resp.GetResponseStream(); StreamReader sr = new StreamReader(s,Encoding.ASCII); String doc = sr.ReadToEnd();

Console.WriteLine(doc); }}

Suppose IIS is running with a virtual directory called MyNewWebAppsSnarf http://localhost/MyNewWebApps/Index.htmlDisplays the HTML code on the DOS Screen

Page 53: C#/.NET

Carnegie Mellon University MSCF 53

Distributed Objects using System.Runtime.Remoting.Channels.Tcp;using System.Runtime.Remoting.Channels;using System.Runtime.Remoting;using System;

class MyClient {

public static void Main() {

ChannelServices.RegisterChannel(new TcpClientChannel());

RemoteStudent r = (RemoteStudent) Activator.GetObject( typeof(RemoteStudent), "tcp://localhost:6502/somestudent");

This clientassumes the server isrunning.

Page 54: C#/.NET

Carnegie Mellon University MSCF 54

String name = r.getName(); int age = r.getAge();

Console.WriteLine("Student Name: " + name + " Age: " + age); }

}

Directory before compilationMyClient.cs Student.dll Student.cs Server.csCompile with

csc -t:exe -r:Student.dll MyClient.cs

Run withMyClientStudent Name: Mike Age: 23

Page 55: C#/.NET

Carnegie Mellon University MSCF 55

The Remote Object

// A Remote Student Object saved in Student.csusing System;

public class RemoteStudent : MarshalByRefObject {

private int age = 23; private String name = "Mike";

public int getAge() { return age; } public String getName() { return name; }

}Compile with csc -t:library Student.csProduces a DLL file Student.dll

Page 56: C#/.NET

Carnegie Mellon University MSCF 56

Publish the Object with Server.cs

using System.Runtime.Remoting.Channels.Tcp;using System.Runtime.Remoting.Channels;using System.Runtime.Remoting;using System;

class MyApp {

public static void Main() {

ChannelServices.RegisterChannel( new TcpServerChannel(6502)); RemotingConfiguration.RegisterWellKnownServiceType( Type.GetType("RemoteStudent, Student"), "SomeStudent", WellKnownObjectMode.SingleCall);

Page 57: C#/.NET

Carnegie Mellon University MSCF 57

Console.WriteLine("Press a key to exit server"); Console.Read(); }}

Compile with csc Server.csExecute with ServerPress a key to exit server


Recommended