SlideShare a Scribd company logo
Notes on C#
BY: MATT BOGGUS
SOME MATERIAL BASED ON ROGER CRAWFIS’ C#
SLIDES
C# and Java similarities
All classes are objects
◦ Compare System.Object to java.lang.Object
Similar compilation and runtime to Java
◦ Compare Java Virtual Machine to Common Language Runtime
Heap-based allocation
◦ Use “new” keyword to instantiate
◦ Automatic garbage collection
C# language features
Namespaces
Classes
◦ Fields
◦ Properties
◦ Methods
◦ Events
Structs
Enums
Interfaces
◦ Methods
◦ Properties
◦ Events
Control Statements
◦ if, else, while, for, switch, foreach
Classes vs. Structs
Classes vs. structs
Both are user-defined types
Both can implement multiple interfaces
Both can contain
◦ Data
◦ Fields, constants, events, arrays
◦ Functions
◦ Methods, properties, indexers, operators, constructors
◦ Type definitions
◦ Classes, structs, enums, interfaces, delegates
Classes vs. structs
CLASS ; REFERENCE TYPE
Reference type
Original instance of the object
can be modified during
execution of method bodies
STRUCT ; VALUE TYPE
Value type
A copy of the object is made
and operated on inside method
bodies
Many types in XNA and MonoGame are defined as structs (ex: Vector2 and Rectangle)
Can pass structs as reference type using ‘ref’ keyword
Interfaces
Interfaces
An interface defines a contract
◦ An interface is a type
◦ Contain definitions for methods, properties, indexers,
and/or events
◦ Any class or struct implementing an interface must
support all parts of the contract
Interfaces provide no implementation
◦ When a class or struct implements an interface it must
provide the implementations
◦ SOLID: Depend upon abstractions not concretions
Interfaces
“Rigid” interface
◦ Functionality is explicitly defined
◦ Ex: OSU Component Library where interfaces include Javadoc comments
with methods’ requires and ensures clauses (pre and post conditions)
“Flexible” interface
◦ Only method signatures are specified
◦ Ex:
IBird interface defines void Fly()
Duck class implements void Fly { position.y += 5; }
Penguin class implements void Fly { // no-op }
public interface IDelete {
void Delete();
}
public class TextBox : IDelete {
public void Delete() { ... }
}
public class ImageBox : IDelete {
public void Delete() { ... }
}
TextBox tb = new TextBox();
tb.Delete();
Interface example
IDelete deletableObj = new ImageBox();
deletableObj.Delete();
deletableObj = new TextBox();
deletableObj.Delete();
Abstract Classes
Abstract class
Similar to interfaces
◦ Cannot be instantiated
◦ In some cases, contain no executable code
◦ Can contain method headers/signatures and properties (more on
these in a bit), but unlike interfaces they can contain concrete
elements like method bodies and fields
Some quirks when working with abstract classes and interfaces
◦ A class that is derived from an abstract class may still implement
interfaces
◦ A concrete class may implement an unlimited number of interfaces,
but may inherit from only one abstract (or concrete) class
public abstract class Shape
{
protected int x = 50;
protected int y = 50;
public abstract int Area();
}
public class Square : Shape
{
public int width;
public int height;
public override int Area()
{
return width * height;
}
public void MoveLeft()
{
x--;
}
}
Abstract class example
Methods marked as abstract have no
bodies and must be overridden
Methods marked as virtual have
bodies and may be overridden
See http://msdn.microsoft.com/en-
us/library/sf985hc5.aspx for a longer
example
Class internals
this
The this keyword is a predefined variable available in non-static function
members
◦ Used to access data and function members unambiguously
public class Person
{
private string name;
public Person(string name)
{
this.name = name;
}
public void Introduce(Person p)
{
if (p != this)
Console.WriteLine(“Hi, I’m “ + name);
}
}
base
The base keyword can be used to access class members that are hidden
by similarly named members of the current class
public class Shape
{
private int x, y;
public override string ToString()
{
return "x=" + x + ",y=" + y;
}
}
public class Circle : Shape
{
private int r;
public override string ToString()
{
return base.ToString() + ",r=" + r;
}
}
Fields
A field or member variable holds data for a class or struct
Can hold:
◦ A built-in value type
◦ A class instance (a reference)
◦ A struct instance (actual data)
◦ An array of class or struct instances
(an array is actually a reference)
◦ An event
Field examples
static and instance
Output is:
20
2
30
2
public class NumStore
{
public static int i = 10;
public int j = 1;
public void AddAndPrint()
{
i=i+10;
j=j+1;
Console.WriteLine(i);
Console.WriteLine(j);
}
}
public class Exercise
{
static void Main()
{
NumStore x = new NumStore();
x.AddAndPrint();
NumStore y = new NumStore();
y.AddAndPrint();
Console.ReadKey();
}
}
Properties
Client side looks like a field
Internally behaves like method calls to get or set the field (i.e. more
abstract than a field)
Properties encapsulate a getting and setting a field
◦ Useful for changing the internal type for a field
◦ Useful for adding code or breakpoints when getting/setting a field
Properties – syntax examples
type PropertyName { get; set; }
Many valid formats
int Score { get; set; }
string Name { get; }
double Time { get; private set; }
Code examples
◦ Person*.cs examples [Compare maintainability]
◦ http://www.dotnetperls.com/property
Modifiers
Public
◦ Accessible anywhere
Protected
◦ Accessible within its class and by derived class instances
Private
◦ Accessible only within the body of the class
◦ (Or anywhere if you use reflection)
Internal
◦ Intuitively, accessible only within this program (more specific definition here)
◦ The default, but you should generally pick public or private instead
Access modifier error example
Cannot have an interface that is less accessible than a concrete class that
implements it (also applies to base and inheriting classes)
interface GameObject // no access modifier, defaults to internal
{
void Draw();
void Update();
}
public class Monster : GameObject
{
// ... implementations of Draw() and Update() go here ...
}
End of lecture
ADDITIONAL ON YOUR OWN SLIDES FOLLOW
Why C#?
Fits with
◦ .NET framework
◦ Large library of features and objects; portable and integrates with software written in
other languages
◦ Visual Studio
◦ Single point of access for software development, source code control, project
management, and code reviews
Additional reasons
◦ Game engines support C# -> XNA, Monogame, Unity
◦ Used in other CSE graphics courses (Game and Animation Techniques; Game
Capstone)
◦ More discussion of pros/cons of C# here
◦ More discussion of pros/cons of C# specific to game development here; this
subset of comments has some good insights
On your own
Java to C# resources
The C# Programming Language for Java Developers – documentation of
language differences organized by programming constructs
Additional Suggestions from StackOverflow
public class Car : Vehicle
{
public enum Make { GM, Honda, BMW }
private Make make;
private string vid;
private Point location;
Car(Make make, string vid, Point loc)
{
this.make = make;
this.vid = vid;
this.location = loc;
}
public void Drive()
{ Console.WriteLine(“vroom”); }
}
Car c =
new Car(Car.Make.BMW,
“JF3559QT98”,
new Point(3,7));
c.Drive();
Class syntax example
How many methods should
classes/interfaces provide?
On your own references
Keep it simple!
◦ The Magical Number Seven, Plus or Minus Two
◦ The average person can hold 7 ± 2 objects in memory at a time
◦ Experts recall more by “chunking” – combining multiple objects
into one
◦ Think You're Multitasking? Think Again
◦ The average person is bad at multi-tasking, so focus on what you’re
doing if you want it done well
Conversion
Conversion operators
Can also specify user-defined explicit and implicit conversions
public class Note
{
private int value;
// Convert to hertz – no loss of precision
public static implicit operator double(Note x) {
return ...;
}
// Convert to nearest note
public static explicit operator Note(double x) {
return ...;
}
}
Note n = (Note)442.578;
double d = n;
The is Operator
The is operator is used to dynamically test if the run-time type of an
object is compatible with a given type
private static void DoSomething(object o)
{
if (o is Car)
((Car)o).Drive();
}
The as Operator
The as operator tries to convert a variable to a specified type; if no such
conversion is possible the result is null
More efficient than using is operator
◦ Can test and convert in one operation
private static void DoSomething(object o)
{
Car c = o as Car;
if (c != null) c.Drive();
}

More Related Content

PPT
CSharp_03_ClassesStructs_and_introduction
PPT
Csharp_mahesh
PPT
Oops lecture 1
PPT
Synapseindia dot net development
PDF
1204csharp
PPTX
C++ theory
PDF
Structured web programming
CSharp_03_ClassesStructs_and_introduction
Csharp_mahesh
Oops lecture 1
Synapseindia dot net development
1204csharp
C++ theory
Structured web programming

Similar to CSharp presentation and software developement (20)

PPTX
C# for C++ programmers
PPT
core java
PPTX
Dart structured web apps
PPT
Advanced c#
PPSX
Writing code that writes code - Nguyen Luong
PPSX
TechkTalk #12 Grokking: Writing code that writes code – Nguyen Luong
PPTX
Back-2-Basics: .NET Coding Standards For The Real World (2011)
PPT
Classes, objects and methods
PPTX
Better Understanding OOP using C#
PDF
Object-oriented Basics
PPTX
Object Oriented Programming with Object Orinted Concepts
PPTX
C# .NET: Language Features and Creating .NET Projects, Namespaces Classes and...
PPTX
OOP_in_CPP_Animesh_Animated_Diagram.pptx
PPTX
Dart, unicorns and rainbows
PPT
14. Defining Classes
PPT
Jacarashed-1746968053-300050282-Java.ppt
PPTX
Framework Design Guidelines For Brussels Users Group
PDF
Lecture 5 interface.pdf
PPT
Visula C# Programming Lecture 8
PDF
Clean Code 2
C# for C++ programmers
core java
Dart structured web apps
Advanced c#
Writing code that writes code - Nguyen Luong
TechkTalk #12 Grokking: Writing code that writes code – Nguyen Luong
Back-2-Basics: .NET Coding Standards For The Real World (2011)
Classes, objects and methods
Better Understanding OOP using C#
Object-oriented Basics
Object Oriented Programming with Object Orinted Concepts
C# .NET: Language Features and Creating .NET Projects, Namespaces Classes and...
OOP_in_CPP_Animesh_Animated_Diagram.pptx
Dart, unicorns and rainbows
14. Defining Classes
Jacarashed-1746968053-300050282-Java.ppt
Framework Design Guidelines For Brussels Users Group
Lecture 5 interface.pdf
Visula C# Programming Lecture 8
Clean Code 2
Ad

Recently uploaded (20)

PPTX
CroxyProxy Instagram Access id login.pptx
PDF
CIFDAQ's Market Wrap: Ethereum Leads, Bitcoin Lags, Institutions Shift
PDF
NewMind AI Weekly Chronicles - August'25 Week I
PDF
Transforming Manufacturing operations through Intelligent Integrations
PDF
How UI/UX Design Impacts User Retention in Mobile Apps.pdf
PDF
Google’s NotebookLM Unveils Video Overviews
PDF
DevOps & Developer Experience Summer BBQ
PDF
Dell Pro 14 Plus: Be better prepared for what’s coming
PDF
AI And Its Effect On The Evolving IT Sector In Australia - Elevate
PDF
solutions_manual_-_materials___processing_in_manufacturing__demargo_.pdf
PDF
Smarter Business Operations Powered by IoT Remote Monitoring
PPTX
Telecom Fraud Prevention Guide | Hyperlink InfoSystem
PPTX
breach-and-attack-simulation-cybersecurity-india-chennai-defenderrabbit-2025....
PPTX
Detection-First SIEM: Rule Types, Dashboards, and Threat-Informed Strategy
PDF
madgavkar20181017ppt McKinsey Presentation.pdf
PDF
NewMind AI Monthly Chronicles - July 2025
PPTX
How to Build Crypto Derivative Exchanges from Scratch.pptx
PDF
Top Generative AI Tools for Patent Drafting in 2025.pdf
PDF
CIFDAQ's Token Spotlight: SKY - A Forgotten Giant's Comeback?
PDF
CIFDAQ's Teaching Thursday: Moving Averages Made Simple
CroxyProxy Instagram Access id login.pptx
CIFDAQ's Market Wrap: Ethereum Leads, Bitcoin Lags, Institutions Shift
NewMind AI Weekly Chronicles - August'25 Week I
Transforming Manufacturing operations through Intelligent Integrations
How UI/UX Design Impacts User Retention in Mobile Apps.pdf
Google’s NotebookLM Unveils Video Overviews
DevOps & Developer Experience Summer BBQ
Dell Pro 14 Plus: Be better prepared for what’s coming
AI And Its Effect On The Evolving IT Sector In Australia - Elevate
solutions_manual_-_materials___processing_in_manufacturing__demargo_.pdf
Smarter Business Operations Powered by IoT Remote Monitoring
Telecom Fraud Prevention Guide | Hyperlink InfoSystem
breach-and-attack-simulation-cybersecurity-india-chennai-defenderrabbit-2025....
Detection-First SIEM: Rule Types, Dashboards, and Threat-Informed Strategy
madgavkar20181017ppt McKinsey Presentation.pdf
NewMind AI Monthly Chronicles - July 2025
How to Build Crypto Derivative Exchanges from Scratch.pptx
Top Generative AI Tools for Patent Drafting in 2025.pdf
CIFDAQ's Token Spotlight: SKY - A Forgotten Giant's Comeback?
CIFDAQ's Teaching Thursday: Moving Averages Made Simple
Ad

CSharp presentation and software developement

  • 1. Notes on C# BY: MATT BOGGUS SOME MATERIAL BASED ON ROGER CRAWFIS’ C# SLIDES
  • 2. C# and Java similarities All classes are objects ◦ Compare System.Object to java.lang.Object Similar compilation and runtime to Java ◦ Compare Java Virtual Machine to Common Language Runtime Heap-based allocation ◦ Use “new” keyword to instantiate ◦ Automatic garbage collection
  • 3. C# language features Namespaces Classes ◦ Fields ◦ Properties ◦ Methods ◦ Events Structs Enums Interfaces ◦ Methods ◦ Properties ◦ Events Control Statements ◦ if, else, while, for, switch, foreach
  • 5. Classes vs. structs Both are user-defined types Both can implement multiple interfaces Both can contain ◦ Data ◦ Fields, constants, events, arrays ◦ Functions ◦ Methods, properties, indexers, operators, constructors ◦ Type definitions ◦ Classes, structs, enums, interfaces, delegates
  • 6. Classes vs. structs CLASS ; REFERENCE TYPE Reference type Original instance of the object can be modified during execution of method bodies STRUCT ; VALUE TYPE Value type A copy of the object is made and operated on inside method bodies Many types in XNA and MonoGame are defined as structs (ex: Vector2 and Rectangle) Can pass structs as reference type using ‘ref’ keyword
  • 8. Interfaces An interface defines a contract ◦ An interface is a type ◦ Contain definitions for methods, properties, indexers, and/or events ◦ Any class or struct implementing an interface must support all parts of the contract Interfaces provide no implementation ◦ When a class or struct implements an interface it must provide the implementations ◦ SOLID: Depend upon abstractions not concretions
  • 9. Interfaces “Rigid” interface ◦ Functionality is explicitly defined ◦ Ex: OSU Component Library where interfaces include Javadoc comments with methods’ requires and ensures clauses (pre and post conditions) “Flexible” interface ◦ Only method signatures are specified ◦ Ex: IBird interface defines void Fly() Duck class implements void Fly { position.y += 5; } Penguin class implements void Fly { // no-op }
  • 10. public interface IDelete { void Delete(); } public class TextBox : IDelete { public void Delete() { ... } } public class ImageBox : IDelete { public void Delete() { ... } } TextBox tb = new TextBox(); tb.Delete(); Interface example IDelete deletableObj = new ImageBox(); deletableObj.Delete(); deletableObj = new TextBox(); deletableObj.Delete();
  • 12. Abstract class Similar to interfaces ◦ Cannot be instantiated ◦ In some cases, contain no executable code ◦ Can contain method headers/signatures and properties (more on these in a bit), but unlike interfaces they can contain concrete elements like method bodies and fields Some quirks when working with abstract classes and interfaces ◦ A class that is derived from an abstract class may still implement interfaces ◦ A concrete class may implement an unlimited number of interfaces, but may inherit from only one abstract (or concrete) class
  • 13. public abstract class Shape { protected int x = 50; protected int y = 50; public abstract int Area(); } public class Square : Shape { public int width; public int height; public override int Area() { return width * height; } public void MoveLeft() { x--; } } Abstract class example Methods marked as abstract have no bodies and must be overridden Methods marked as virtual have bodies and may be overridden See http://msdn.microsoft.com/en- us/library/sf985hc5.aspx for a longer example
  • 15. this The this keyword is a predefined variable available in non-static function members ◦ Used to access data and function members unambiguously public class Person { private string name; public Person(string name) { this.name = name; } public void Introduce(Person p) { if (p != this) Console.WriteLine(“Hi, I’m “ + name); } }
  • 16. base The base keyword can be used to access class members that are hidden by similarly named members of the current class public class Shape { private int x, y; public override string ToString() { return "x=" + x + ",y=" + y; } } public class Circle : Shape { private int r; public override string ToString() { return base.ToString() + ",r=" + r; } }
  • 17. Fields A field or member variable holds data for a class or struct Can hold: ◦ A built-in value type ◦ A class instance (a reference) ◦ A struct instance (actual data) ◦ An array of class or struct instances (an array is actually a reference) ◦ An event
  • 18. Field examples static and instance Output is: 20 2 30 2 public class NumStore { public static int i = 10; public int j = 1; public void AddAndPrint() { i=i+10; j=j+1; Console.WriteLine(i); Console.WriteLine(j); } } public class Exercise { static void Main() { NumStore x = new NumStore(); x.AddAndPrint(); NumStore y = new NumStore(); y.AddAndPrint(); Console.ReadKey(); } }
  • 19. Properties Client side looks like a field Internally behaves like method calls to get or set the field (i.e. more abstract than a field) Properties encapsulate a getting and setting a field ◦ Useful for changing the internal type for a field ◦ Useful for adding code or breakpoints when getting/setting a field
  • 20. Properties – syntax examples type PropertyName { get; set; } Many valid formats int Score { get; set; } string Name { get; } double Time { get; private set; } Code examples ◦ Person*.cs examples [Compare maintainability] ◦ http://www.dotnetperls.com/property
  • 21. Modifiers Public ◦ Accessible anywhere Protected ◦ Accessible within its class and by derived class instances Private ◦ Accessible only within the body of the class ◦ (Or anywhere if you use reflection) Internal ◦ Intuitively, accessible only within this program (more specific definition here) ◦ The default, but you should generally pick public or private instead
  • 22. Access modifier error example Cannot have an interface that is less accessible than a concrete class that implements it (also applies to base and inheriting classes) interface GameObject // no access modifier, defaults to internal { void Draw(); void Update(); } public class Monster : GameObject { // ... implementations of Draw() and Update() go here ... }
  • 23. End of lecture ADDITIONAL ON YOUR OWN SLIDES FOLLOW
  • 24. Why C#? Fits with ◦ .NET framework ◦ Large library of features and objects; portable and integrates with software written in other languages ◦ Visual Studio ◦ Single point of access for software development, source code control, project management, and code reviews Additional reasons ◦ Game engines support C# -> XNA, Monogame, Unity ◦ Used in other CSE graphics courses (Game and Animation Techniques; Game Capstone) ◦ More discussion of pros/cons of C# here ◦ More discussion of pros/cons of C# specific to game development here; this subset of comments has some good insights
  • 25. On your own Java to C# resources The C# Programming Language for Java Developers – documentation of language differences organized by programming constructs Additional Suggestions from StackOverflow
  • 26. public class Car : Vehicle { public enum Make { GM, Honda, BMW } private Make make; private string vid; private Point location; Car(Make make, string vid, Point loc) { this.make = make; this.vid = vid; this.location = loc; } public void Drive() { Console.WriteLine(“vroom”); } } Car c = new Car(Car.Make.BMW, “JF3559QT98”, new Point(3,7)); c.Drive(); Class syntax example
  • 27. How many methods should classes/interfaces provide? On your own references Keep it simple! ◦ The Magical Number Seven, Plus or Minus Two ◦ The average person can hold 7 ± 2 objects in memory at a time ◦ Experts recall more by “chunking” – combining multiple objects into one ◦ Think You're Multitasking? Think Again ◦ The average person is bad at multi-tasking, so focus on what you’re doing if you want it done well
  • 29. Conversion operators Can also specify user-defined explicit and implicit conversions public class Note { private int value; // Convert to hertz – no loss of precision public static implicit operator double(Note x) { return ...; } // Convert to nearest note public static explicit operator Note(double x) { return ...; } } Note n = (Note)442.578; double d = n;
  • 30. The is Operator The is operator is used to dynamically test if the run-time type of an object is compatible with a given type private static void DoSomething(object o) { if (o is Car) ((Car)o).Drive(); }
  • 31. The as Operator The as operator tries to convert a variable to a specified type; if no such conversion is possible the result is null More efficient than using is operator ◦ Can test and convert in one operation private static void DoSomething(object o) { Car c = o as Car; if (c != null) c.Drive(); }