580 likes | 709 Views
Neal Stublen nstublen@jccc.edu. C#: Introduction for Developers. Tonight’s Agenda. Interfaces Generics Code Organization Databases ADO.NET Datasets Q&A. Chapter 15 Interfaces. What’s an interface?. It’s like a class with… No member data All methods are public
E N D
Neal Stublen nstublen@jccc.edu C#: Introduction for Developers
Tonight’s Agenda • Interfaces • Generics • Code Organization • Databases • ADO.NET • Datasets • Q&A
What’s an interface? • It’s like a class with… • No member data • All methods are public • All methods are abstract • An interface implies nothing about the implementation behind it • A class can only inherit from one class • A class can implement multiple interfaces • Interfaces often represent only a portion of a class’ functionality
Why interfaces? • Interfaces are better suited to situations in which your applications require many unrelated object types to provide certain functionality • Interfaces are more flexible than base classes because you can define a single implementation that can implement multiple interfaces. • Interfaces are better in situations in which you do not want or need to inherit implementation from a base class. • Structures cannot inherit from classes, but they can implement interfaces.
Common .NET Interfaces • IComparable • Used to compare two objects • Sorting algorithms • IDisposable • Frees unmanaged resources when an object goes out of scope • If your classes implement these interfaces, they can be used wherever these interfaces are specified
Example Interfaces public interface IStreamable { bool Read(FileStreaminInput); bool Write(FileStreaminOutput); } public interface IHTMLDisplayable { void Render(OutputStreaminStream); }
Implementing Interfaces public interface IStreamable { bool Read(FileStreaminInput); bool Write(FileStreaminOutput); } public class MyObject : IStreamable { public boolRead(FileStreaminInput) { } public boolWrite(FileStreaminOutput) { } }
Implementing ICloneable // Duplicate any cloneable object public List<object> Duplicator(ICloneablesrc, int count) { List<object> list = new List<object>(); for (int index = 0; index < count; ++index) { list.Add(src.Clone()); } return list; }
Looking at IComparable • Any object that implements IComparable can be sorted with the generic Array.Sort() method
What’s a generic class? • A class definition that doesn’t explicitly declare all of the types it uses internally • Allows creation of new types by specifying those internal types later
Using Generic Types • Generic types are declared using <> after the type name • Instead of the general purpose interface: IComparable • Use the type-specific interface: IComparable<T> class Temperature : IComparable class Temperature : IComparable<Temperature>
Generics Example class Average<T> { public void Include(TinValue); public T Average { get { ... } } } Average<int> integerAverage; Average<double> doubleAverage;
Updating IComparable • Instead of comparing generic objects, we can compare Temperature objects
Common Generics • Collection classes • List<T> • SortedList<K, V> • Enumeration (foreach) • IEnumerable<T> • IEnumerator<T>
Generic Constraints public class MyGeneric<T> where T: class { // T is a class (can be assigned null) } public class MyGeneric<T> where T: class, IComparable<T> { // T implements IComparable interface } public class MyGeneric<T> where T: struct { // T is a struct } public class MyGeneric<T> where T: new() { // T has a default constructor }
Code Organization • Multiple classes in a single file • Closely related classes (e.g. EventArgs) • Nested classes • Objects that only exist within the context of another type of object
Partial Classes • Split a single class over multiple files • Forms split Designer code into separate file • Possible to split interface implementations into separate files • Partial classes must have the same visibility • Partial methods split the declaration and implementation across files
Namespaces • Organize classes into logical groupings • Avoid type name collisions • using <namespace> • <namespace>.<ClassName>
Nested Namespaces using ns1 { using ns2 { } } using ns1.ns2 { }
XML Documentation • Standardized documentation format for C# code • Type three slashes “///” before a method implementation or class member • <summary> tag is used by IntelliSense • Processed by third party tools • Doxygen • Sandcastle
Class Libraries • Share class across multiple projects • Projects “reference” other projects • Move SportsTeam into a class library
Databases • Client-server architecture • One server, many clients • Server runs Microsoft SQL Server • Clients use ADO.NET 4 • Relational databases • SQL (Structured Query Language)
Tables • Tables store data • One or more records (rows) • A primary key uniquely identifies each row • Indexes provide an efficient way to access data based on values in specific columns
“Relations” Among Tables • Key columns are used to relate tables • Foreign keys in one table correspond to primary keys in another table • One-to-many • One-to-one • Many-to-many
Table Columns • Columns are defined by a name and data type • bit • char, varchar, text • datetime, smalldatetime • decimal, numeric • float, real • bigint, int, smallint, tinyint • money, smallmoney
Column Values • null (maybe, maybe not – depends on column definition) • Default value • Identity column (auto-increment) • Constraints
SELECT • Select data from a database • SELECT column_name,column_nameFROM table_name; • SELECT * FROM table_name; • SELECT title, publisher FROM books;
INNER JOIN • Select all rows from two table where specified columns have matching values • SELECT column_name(s)FROM table1INNER JOIN table2ON table1.column_name=table2.column_name; • SELECT column_name(s)FROM table1JOIN table2ON table1.column_name=table2.column_name; • INNER JOIN is the same as JOIN
ADD, UPDATE, DELETE • Add a row to a table • INSERT INTO table_nameVALUES (value1,value2,value3,...); • INSERT INTO table_name (column1,column2,column3,...)VALUES (value1,value2,value3,...); • Update a row in a table • UPDATE table_nameSET column1=value1,column2=value2,...WHERE some_column=some_value; • Delete a row from a table • DELETE FROM table_nameWHERE some_column=some_value;
Online Reference • Tutorials and references • http://w3schools.com/sql
ADO.NET • Data providers implement a common API to various database servers • SQL Server • OLE DB • ODBC • Oracle • Third party • MySQL • SQLite
Components • Database server • .NET data provider • Connection • Connects to a specific database • Command • SELECT, UPDATE, etc. • DataReader, DataAdapter • Help retrieve data from a query
Datasets • Store data in a disconnected cache • Data source may be a database, XML data, local application data • Mimics the structure and behavior of a relational database
Datasets Mimic Relational DB • Dataset contains a collection of tables • Not necessarily the same table from the database • May be a subset of columns and rows • May be joined to another table • Tables contain a collection of columns • Tables contain a collection of rows • Tables contain a collection of constraints • Dataset contains a collection of relations • Everything is accessed through object properties
Alternatives to Datasets • You can use Command and Connection objects directly • Select, Insert, Update, Delete
Database Concurrency • Multiple clients accessing data • ADO.NET datasets are “disconnected” • Pessimistic concurrency • Lock database records to prevent conflicts • Optimistic concurrency • Check for data changes before writing • Throw an exception if data has changed • “Last in wins” • Data is written by last operation • Data may be lost
Avoid Concurrency Issues • Update and refresh datasets frequently • Avoid updating large tables in datasets • Only reduces risk! • You still must handle the exceptions
Populating a Database • SQLExpress should be installed with Visual Studio • The book provides a .sql file for populating the MMABooks database in SQLExpress • Double-click the .bat file on the S: drive • We’ll need to repeat this process at the start of each class session
Confirm Database Access • Using Visual Studio to locate the new database as a Data Source • View > Server Explorer • Add Connection... • Server name: .\SQLEXPRESS • Database name: MMABooks • Test Connection
Dataset Summary • Instead of a database, we can pull data from: • WCF Data Services • Custom objects • SharePoint • Entity Framework • Object-relational mapping framework (ORM) • Maps database table data to C# objects • Object instance represents a table row • View > Server Explorer