C#/.NET - University of California, Riverside
Download
Report
Transcript C#/.NET - University of California, Riverside
C#/.NET
Jacob Lewallen
C# vs .NET
• .NET is a platform.
• Many languages compile to .NET:
– VB.NET
– Python.NET
– Managed C++
– C#
.NET
• Intermediate Language (IL) – “half-way”
• Interpreted locally using JIT (Just-In-Time)
compilers.
• Has a very nice standard library,
comparable to Java’s.
• Theme: More “open” to it’s hosted system
than Java.
C# Basics
• Garbage Collected
• Very Java-esque:
– Main is static method in some class
•
•
•
•
Designed for .NET, rather than adapted.
Simple operator overloading
Everything is an Object
Java-like inheritance
Safe vs Managed
• Unmanaged – native code - non-IL code.
• Unsafe code – code wrapped in C#’s
unsafe mechanism:
– Relaxed type checking
– Pointers
– Flagged as unsafe and requires more trust.
• Unsafe code is still managed code.
Syntax
• Think Java, if that fails think C++
public class ExampleApp {
public static void Main() {
string str = “Hello, World”;
Console.WriteLine(str);
}
}
Namespaces
• More like C++ namespaces, with some
Java packages sprinkled in.
using System.Collections;
• Instead of using…
System.Collections.Hashtable
• Assemblies (DLLs) are named for the
namespaces they contain, usually.
Declaring a Namespace
• You can wrap your code in the namespace
like so:
Namespace UCR.Technical.Seminar {
…
}
• Nearly all code I’ve ever seen has been
wrapped in a Namespace.
Collections
• System.Collections.Hashtable
• System.Collections.ArrayList
• Type-safe enumerations:
foreach (string name in users) {
…
}
• .NET will do runtime type checking.
Memory
• All allocated memory is garbage collected.
• We use new to create object instances.
• We can override a finalizer for our classes
to handle cleanup.
Value Types
• Categories: Struct, Enumeration, Numeric
Types (integers, floats, bools)
• Assignments create copies of the
assigned value.
• Value types cannot contain null.
• int is an alias for System.Int32, all value
types have an alias.
Reference Types
• Also referred to as object’s.
• Store references to actual data.
• Passed by reference, by default.
Boxing
• Boxing - conversion from a value type to
type object. It’s implicit:
int x = 23;
object o = 23; object r = x;
• x is an integer on the heap, value is 23.
• o is an object, referencing a new value on
the heap, that’s 23.
• r is an object, referencing the value x.
Unboxing
• Explicit conversion from a reference type,
an object, to a value type.
object o = 23;
int x = (int)o;
• Type checking is done in the conversion.
• Can throw InvalidCastException’s.
Properties
• Replaces getter/setter paradigm.
• Wraps private member variables around
more defined accessors.
• object.getName() you do object.Name.
• object.setName(“Jacob”) becomes
object.Name = “Jacob”;
• Standard library uses upper case names
for all properties.
Properties
• Syntax for declaring a Property:
String Name {
get { return (m_name); }
set { m_name = value; }
}
• Where m_name is our member variable.
• Read-only Properties have no set.
Events/Delegates
• Calling/invoking methods w/o knowing
anything about the method’s object.
• Defining a Delegate:
public delegate void ButtonDelegate(string name);
• This delegate takes a string and returns
nothing.
Defining a Delegate
• Declare a variable for out delegate:
private ButtonDelegate m_presses;
• We can create an instance of her:
m_presses = new ButtonDelegate(SayHello);
public bool SayHello(string name) { … }
• Now, we can invoke/trigger the delegate:
m_presses(“Hello, World”);
Using Delegates
• Delegates are used exclusively for event
handling in .NET GUI’s.
• Many design patterns
(publisher/subscribe)
Microsoft Whining
• You can download the .NET SDK from
Microsoft. You’ll get:
– All the necessary command line utilities for
developing with C#.
– A few graphical tools for inspecting IL.
– Help via http://msdn.microsoft.com/
• Visual Studio is NOT required.
Mono
• Open Source .NET/C# implementation
• http://www.go-mono.com/
Assembly
• Think shared-object - *.dll or *.so.
ADO.NET
System.XML