Notes
Slide Show
Outline
1
C# Programming Language
Overview
  • Jim Fawcett
  • CSE681 – SW Modeling & Analysis
  • Summer 2003
2
C# Language
  • Looks a lot like Java.
    • A strong analogy between:
      • Java Virtual Machine & .Net CLR
      • Java bytecodes & .Net Intermediate Language
      • Java packages & CRL components and assemblies
      • Both have Just In Time (JIT) compilers
      • Both support reflection, used to obtain class information at run time
      • Both languages lack generics
  • Differences:
    • Java and C# do have significant differences
      • C# has most of the operators and keywords of C++
      • C# has enumerations
      • C# plans to add generics in the second release of Visual Studio 7
      • C# code supports attributes – tagged metadata
3
First C# Program
4
Differences Between C# and C++
  • In C# there are no global functions.  Everything is a class.
    • Main(string args[]) is a static member function of a class.
  • The C# class libraries are like Java Packages, not like the C and C++ Standard Libraries.
    • System, System.Drawing, System.Runtime.Remoting, System.Text, System.Web
    • C# class hierarchy is rooted in a single “Object” class
  • C# does not separate class declaration and member function definitions.
    • Every function definition is inline in the class declaration – like the Java structure.
    • There are no header files.
    • Instead of #include, C# uses using statements:
      • using System;
      • using System.ComponentModel;
5
Differences between C++ and C#
  • The C# object model is very different from the C++ object model.
    • Illustrated on the next slide
  • C# supports only single inheritence of implementation, but multiple inheritance of interfaces
  • C# does not support use of pointers, only references, except in “unsafe” code.
  • Use of a C# variable before initialization is a compile-time error.


6
C# Object Model
7
More Differences
  • The CLR defines a new delegate type, used for callbacks.
  • event is a keyword in all CLR languages.
  • All memory allocations are subject to garbage collection – you don’t call delete.
  • There are no #includes unless you want to use unmanaged C++ in the same file as managed C++.
  • In managed C++ all class data members are either primitive value types, C++ references, or C++ pointers.  Nothing else is allowed.
  • The CLR provides threads, directory services, and remoting.  The Standard C++ Library provides non of these, although the first two are easy to provide yourself.


8
Common Type System
  • Value Types
    • Primitive types
      • See page 10
    • Structures
      • methods
      • fields
      • properties
      • Events
      • Member adornments:
        public, protected, private, abstract, static
    • Enumerations
9
Common Type System
  • Reference Types
    • Classes
      • methods
      • fields
      • properties
      • Events
      • Member adornments:
        public, protected, private, abstract, static
    • Interfaces
      • Class can inherit more than one
      • Must implement each base interface
    • Delegates
      • Instances used for notifications

10
C# Primitive Types
  • .Net Base Class
    • System.Byte
    • System.SByte
    • System.Int16
    • System.Int32
    • System.Int64
    • System.UInt16
    • System.UInt32
    • System.UInt64
    • System.Single
    • System.Double
    • System.Object
    • System.Char
    • System.String
    • System.Decimal
    • System.Boolean





  • C# Types
    • byte
    • sbyte
    • short
    • int
    • long
    • ushort
    • uint
    • ulong
    • float
    • double
    • object
    • char
    • string
    • decimal
    • bool
11
C# Object Type
  • Object is the root class of the C# library
  • Object’s members:
    • public Object();
    • public virtual Boolean Equals(Object obj);
      • Returns true if obj and invoker handles point to the same body.
    • public virtual Int32 GetHashCode();
      • Return value identifies object instance.
    • public Type GetType();
      • Type object supports RTTI – see next page
    • public virtual String ToString();
      • Returns namespace.name
    • protected virtual void Finalize();
      • Called to free allocated resources before object is garbage collected.
    • protected Object MemberwiseClone();
      • Performs shallow copy
      • To have your class instances perform deep copies you need to implement the ICloneable interface.
12
Type Class
  • You get a type object in several ways:
    • Type t = myObj.GetType();
    • Type t = Type.GetType(“myObj”);
  • Some of Type’s members:
    • IsAbstract
    • IsArray
    • IsClass
    • IsComObject
    • IsEnum
    • IsInterface
    • IsPrimitive
    • IsSealed
    • IsValueType
    • InvokeMember()
    • GetType() returns Type Object
    • FindMembers() returns MemberInfo array
    • GetEvents() returns EventInfo array
    • GetFields() :
    • GetMethods() :
    • GetInterfaces() :
    • GetMembers() :
    • GetProperties() :
13
"You get type object this..."
  •     You get type object this way:
    • Type t = myObj.GetType();
    • Type t = Type.GetType(“myObj”);

  •     Some of Type’s members:
    • IsAbstract
    • IsArray
    • IsClass
    • IsComObject
    • IsEnum
    • IsInterface
    • IsPrimitive
    • IsSealed
    • IsValueType
    • InvokeMember()
    • GetType()                      returns Type Object
    • FindMembers()           returns MemberInfo array
    • GetEvents() returns EventInfo array
    • GetFields() :
    • GetMethods()            :
    • GetInterfaces() :
    • GetMembers() :
    • GetProperties() :

14
WinCV – Class Viewer
15
System.string Class – view #1
16
Class Browser in IDE
17
Useful Interfaces
  • IComparable - method
    • Int CompareTo(object obj);
      • Return:
        • Negative => less
        • Zero => equal
        • Positive => greater


  • ICloneable - method
    • object clone();


  • ICollection – properties and method
    • int count { get; }
    • bool IsSynchronized { get; }
    • object SyncRoot { get; }
    • void CopyTo(Array array, int index);
18
Useful Interfaces
  • IEnumerable - method
    • System.Collections.IEnumerator GetEnumerator();


  • IEnumerator – property and methods
    • object Current { get; }
    • bool MoveNext();
    • void Reset();

19
Useful Interfaces
  • IDictionary
    • bool IsFixedSize { get; }
    • bool IsReadOnly { get; }
    • object this[ object key ] { get; set; }
    • ICollection keys { get; }
    • ICollection values { get; }
    • void Add(object key, object value);
    • void Clear();
    • bool Contains(object key);
    • System.Collections.IDictionaryEnumerator GetEnumerator();
    • void Remove(object key);
  • IList
    • bool IsFixedSize { get; }
    • bool IsReadOnly { get; }
    • object this[ object key ] { get; set; }
    • void Add(object key, object value);
    • void Clear();
    • bool Contains(object key);
    • int IndexOf(object value);
    • void Insert(int index, object value);
    • void Remove(object value);
    • void RemoveAt(int index);

20
Delegates
  • Delegates are used for callbacks:
    • In response to some event they invoke one or more functions supplied to them.
    • Library code that generates an event will define a delegate for application developers to use – the developer defines application specific processing that needs to occur in response to an event generated by the library code.
    • A delegate defines one specific function signature to use:

        public delegate rtnType delFun(args…);

      This declares a new type, delFun that invokes functions with that signature.
    • The developer supplies functions this way:

           libClass.delFun myDel =
        new libClass.delFun(myFun);

      This declares a new instance, myDel, of the delFun type.
21
Events
  • Events are specialized delegates that are declared and invoked by a class that wants to publish notifications.

    The event handlers are functions created by an event subscriber and given to the delegate.
  • A C# event uses the specialized delegate event handler of the form:

    public delegate void evDelegate(
        object sender, userEventArgs eArgs
    );

    userEventArgs is a subscriber defined class, derived from System.EventArgs.  You usually provide it with a constructor to allow you to specify information for the event to use.
  • The event is then declared by the publisher as:

    public event evDelegate evt;

    Either publisher or subscriber has to create a delegate object, eveDel, and pass it to the other participant.
  • The event is invoked by the publisher this way:

    evDel(
      this, new userEventArgs(arg)
    );
  • The subscriber adds an event handler function, myOnEvent, to the event delegate this way:

    Publisher.evDelegate evDel +=
    new Publisher.evDelegate(myOnEvent);


22
Threads
  • A C# thread is created with the statement:

    Thread thrd = new Thread();
  • System.Threading declares a delegate, named ThreadStart, used to define the thread’s processing.
    • ThreadStart accepts functions that take no arguments and have void return type.
  • You define a processing class that uses constructor arguments or member functions to supply whatever parameters the thread processing needs.
  • To start the thread you simply do this:

       Thread thrd = new Thread();
      ThreadStart thrdProc =
    new ThreadStart(myProc);
      thrd.Start(thrdProc);
23
Thread Synchronization
  • The simplest way to provide mutually exclusive access to an object shared between threads is to use lock:

      lock(someObject) {
    // do some processing on
    // someObject
      }

    While a thread is processing the code inside the lock statement no other thread is allowed to access someObject.
24
Components
  • Because C# classes are reference types, they expose no physical implementation detail to a client.  What the client creates on its stack frames are simply handles to the class implementations.


    • The compiler does type checking for a client from metadata in an accessed assembly.
    • No header file is included, so the client is not dependent on implementation details of the class.


    • Consequently, any C# library dll can serve as a component for local access.


    • To make a component remotely accessible, you need to derive from System.MarshalByRefObject
25
C# Object Model
26
Assemblies
  • An assembly is a versioned, self-describing binary (dll or exe)
  • An assembly is the unit of deployment in .Net
  • An assembly is one or more files that contain:
    • A Manifest
      • Documents each file in the assembly
      • Establishes the assembly version
      • Documents external assemblies referenced
    • Type metadata
      • Describes all the methods, properties, fields, and events in each module in the assembly
    • MSIL code
      • Platform independent intermediate code
      • JIT transforms IL into platform specific code
    • Optional resources
      • Bitmaps, string resources, …

27
Assembly Structure











  • Visual Studio does most of the work in configuring an assembly for you.
28
Metadata in demoFiles.exe
29
Versioning
  • Assemblies can be public or private:
    • A private assembly is used only by one executable, and no version information is checked at loadtime.
      • Private assemblies are contained in the project directory or, if there is a config file, in a subdirectory of the project directory.
    • A shared assembly is used by more than one executable, and is loaded only if the version number is compatible with the using executable.
      • Shared assemblies reside in the Global Assembly Cache (GAC), a specific directory.
      • Version compatibility rules can be configured by the user.
    • Since no registry entries are made for the assembly, each user executable can attach to its own version of the assembly.  This is called side-by-side execution by Microsoft.
    • A shared assembly is created from a private assembly, using one of Microsoft’s utilities provided for that purpose.
30
C# Libraries
  • System
  • System.Collections
    • ArrayList, Queue, Stack
  • System.Collections.Specialized
    • StringDictionary
  • System.ComponentModel
    • Used to create components and controls
    • Used by WinForms
  • System.ComponentModel.Design.Serialization
    • Used to make state of an object persistant
  • System.Data
    • Encapsulates use of ADO.NET
31
More C# Libraries
  • System.Drawing – GDI+ support
    • System.Drawing.Drawing2D – special effects
    • System.Drawing.Imaging – support for .jpg, .gif files
    • System.Drawing.Printing – settings like margins, resolution
  • System.Net – support for HTTP, DNS, basic sockets
    • System.Net.sockets – sockets details
  • System.Reflection
    • view application’s meta data including RTTI
  • System.Runtime.InteropServices
    • Access COM objects and Win32 API

32
Remoting Libraries
  • System.Runtime.Remoting
    • System.Runtime.Remoting.Activation
      • Activate remote objects
    • System.Runtime.Remoting.Channels
      • Sets up channel sinks and sources for remote objects
    • System.Runtime.Remoting.Channels.HTTP
      • Uses SOAP protocol to communicate with remote objects
    • System.Runtime.Remoting.Channels.TCP
      • Uses binary transmission over sockets
    • System.Runtime.Remoting.Contexts
      • Set threading and security contexts for remoting
    • System.Runtime.Remoting.Messaging
      • Classes to handle message passing through message sinks
    • System.Runtime.Remoting.Meta data
      • Customize HTTP SoapAction type output and XML Namespace URL
    • System.Runtime.Remoting.Proxies
    • System.Runtime.Remoting.Services
33
You must be joking –
More Libraries!
  • System.Runtime.Serialization
    • System.Runtime.Serialization.Formatters
      • System.Runtime.Serialization.Formatters.Soap
  • System.Security
  • System.ServiceProcess
    • Create windows services that run as Daemons
  • System.Text.RegularExpressions
  • System.Threading
    • Defines Mutex, Thread, and Timeout
  • System.Timers
    • Fire events at timed intervals, day, week, or month
34
Web Libraries
  • System.Web
    • System.Web.Hosting
      • Communicate with IIS and ISAPI run-time
    • System.Web.Mail
    • System.Web.Security
      • cookies, web authentication, Passport
    • System.Web.Services – close ties to ASP.NET
      • System.Web.Services.Description
      • System.Web.Services.Discovery
      • System.Web.Services.Protocol – raw HTTP and SOAP requests
      • System.Web.SessionState – maintain state between page requests
    • System.Web.UI – access to WebForms
35
WinForms and XML Libraries
  • System.Windows.Forms – Forms based GUI design
  • System.Xml – XML DOM
    • System.Xml.Schema
      • Authenticate XML structure
    • System.Xml.Serialization
      • Serialize to XML
    • System.Xml.XPath
      • Navigate XSL
    • System.Xml.Xsl
      • Support for XSL – XML stylesheets
36
So How do we Learn all this stuff!
  • ClassView -> Class Browser -> Help

      to the rescue!
37
Access Class Browser from class View
38
Select Type to see its Members
39
Browsing System.DLL
40
Getting Help on a Selected Type or Member – Just hit F1
41
Takes you Immediately to Help Documentation for that Identifier