Add an indexer in an interface

image_pdfimage_print

/*
C#: The Complete Reference
by Herbert Schildt

Publisher: Osborne/McGraw-Hill (March 8, 2002)
ISBN: 0072134852
*/
// Add an indexer in an interface.

using System;

public interface ISeries {
// an interface property
int next {
get; // return the next number in series
set; // set next number
}

// an interface indexer
int this[int index] {
get; // return the specified number in series
}
}

// Implement ISeries.
class ByTwos : ISeries {
int val;

public ByTwos() {
val = 0;
}

// get or set value using a property
public int next {
get {
val += 2;
return val;
}
set {
val = value;
}
}

// get a value using an index
public int this[int index] {
get {
val = 0;
for(int i=0; i

Use a property in an interface

image_pdfimage_print

/*
C#: The Complete Reference
by Herbert Schildt

Publisher: Osborne/McGraw-Hill (March 8, 2002)
ISBN: 0072134852
*/
// Use a property in an interface.

using System;

public interface ISeries {
// an interface property
int next {
get; // return the next number in series
set; // set next number
}
}

// Implement ISeries.
class ByTwos : ISeries {
int val;

public ByTwos() {
val = 0;
}

// get or set value
public int next {
get {
val += 2;
return val;
}
set {
val = value;
}
}
}

// Demonstrate an interface property.
public class SeriesDemo3 {
public static void Main() {
ByTwos ob = new ByTwos();

// access series through a property
for(int i=0; i < 5; i++) Console.WriteLine("Next value is " + ob.next); Console.WriteLine(" Starting at 21"); ob.next = 21; for(int i=0; i < 5; i++) Console.WriteLine("Next value is " + ob.next); } } [/csharp]

Demonstrate the ByTwos interface 2

image_pdfimage_print

/*
C#: The Complete Reference
by Herbert Schildt

Publisher: Osborne/McGraw-Hill (March 8, 2002)
ISBN: 0072134852
*/
using System;

public interface ISeries {
int getNext(); // return next number in series
void reset(); // restart
void setStart(int x); // set starting value
}

// Use ISeries to generate a sequence of even numbers.
class ByTwos : ISeries {
int start;
int val;

public ByTwos() {
start = 0;
val = 0;
}

public int getNext() {
val += 2;
return val;
}

public void reset() {
val = start;
}

public void setStart(int x) {
start = x;
val = start;
}
}

// Use ISeries to implement a series of prime numbers.
class Primes : ISeries {
int start;
int val;

public Primes() {
start = 2;
val = 2;
}

public int getNext() {
int i, j;
bool isprime;

val++;
for(i = val; i < 1000000; i++) { isprime = true; for(j = 2; j < (i/j + 1); j++) { if((i%j)==0) { isprime = false; break; } } if(isprime) { val = i; break; } } return val; } public void reset() { val = start; } public void setStart(int x) { start = x; val = start; } } public class SeriesDemo2 { public static void Main() { ByTwos twoOb = new ByTwos(); Primes primeOb = new Primes(); ISeries ob; for(int i=0; i < 5; i++) { ob = twoOb; Console.WriteLine("Next ByTwos value is " + ob.getNext()); ob = primeOb; Console.WriteLine("Next prime number is " + ob.getNext()); } } } [/csharp]

Demonstrate the ByTwos interface

image_pdfimage_print

/*
C#: The Complete Reference
by Herbert Schildt

Publisher: Osborne/McGraw-Hill (March 8, 2002)
ISBN: 0072134852
*/
using System;

public interface ISeries {
int getNext(); // return next number in series
void reset(); // restart
void setStart(int x); // set starting value
}

// Implement ISeries.
class ByTwos : ISeries {
int start;
int val;

public ByTwos() {
start = 0;
val = 0;
}

public int getNext() {
val += 2;
return val;
}

public void reset() {
val = start;
}

public void setStart(int x) {
start = x;
val = start;
}
}

// Demonstrate the ByTwos interface.

public class SeriesDemo {
public static void Main() {
ByTwos ob = new ByTwos();

for(int i=0; i < 5; i++) Console.WriteLine("Next value is " + ob.getNext()); Console.WriteLine(" Resetting"); ob.reset(); for(int i=0; i < 5; i++) Console.WriteLine("Next value is " + ob.getNext()); Console.WriteLine(" Starting at 100"); ob.setStart(100); for(int i=0; i < 5; i++) Console.WriteLine("Next value is " + ob.getNext()); } } [/csharp]

Interface with method name conflicts

image_pdfimage_print
   
 
using System;

public delegate void AlarmEvent(IAlarm sender);

public interface IAlarm {
    event AlarmEvent IssueAlarm;
}

abstract class MyStuff : ICloneable {
    public object Clone() {
        return null;
    }
    public void DoStuff() {
    }

}
interface IFoo {
    void DoStuff();
}

interface IBar {
    void DoStuff();
}

interface ITest {
    void DoSomething();
    int DoSomethingElse();
}
class MyClass : IFoo, IBar {
    void IFoo.DoStuff() {
    }
    void IBar.DoStuff() {
    }
}

class MainClass : IComparable {
    public int CompareTo(object other) {
        return -1;
    }
    static int Main(string[] args) {
        MainClass c = new MainClass();
        MainClass c2 = new MainClass();
        if (c.CompareTo(c2) == 0)
            return 0;
        MyClass c3 = new MyClass();
        return 1;
    }
}

    


Return class object from indexer

image_pdfimage_print
   
 
using System;

public class MyValue {
    public String Name;
}

class CardDeck {
    private MyValue[] Cards = new MyValue[52];
    public MyValue this[int index] {
        get {
            return Cards[index];
        }
        set {
            Cards[index] = value;
        }
    }

    public static void Main(String[] args) {
        try {
            CardDeck PokerDeck = new CardDeck();
            MyValue HiddenAce = PokerDeck[53];
        } catch (IndexOutOfRangeException e) {
            Console.WriteLine(e.Message);
        } finally {
            // Cleanup code
        }
    }
}

    


Indexing with Multiple Parameters

image_pdfimage_print

   

/*
A Programmer&#039;s Introduction to C# (Second Edition)
by Eric Gunnerson

Publisher: Apress  L.P.
ISBN: 1-893115-62-3
*/
// 19 - Indexers and EnumeratorsIndexing with Multiple Parameters
// copyright 2000 Eric Gunnerson
using System;

class Player
{
    string name;
    
    public Player(string name)
    {
        this.name = name;
    }
    
    public override string ToString()
    {
        return(name);
    }
}

class Board
{
    Player[,] board = new Player[8, 8];
    
    int RowToIndex(string row)
    {
        string temp = row.ToUpper();
        return((int) temp[0] - (int) &#039;A&#039;);
    }
    
    int PositionToColumn(string pos)
    {
        return(pos[1] - &#039;0&#039; - 1);
    }
    
    public Player this[string row, int column]
    {
        get
        {
            return(board[RowToIndex(row), column - 1]);
        }
        set
        {
            board[RowToIndex(row), column - 1] = value;
        }
    }    
    
    public Player this[string position]
    {
        get
        {
            return(board[RowToIndex(position),
            PositionToColumn(position)]);
        }
        set
        {
            board[RowToIndex(position),
            PositionToColumn(position)] = value;
        }
    }    
}

public class IndexingwithMultipleParameters
{
    public static void Main()
    {
        Board board = new Board();
        
        board["A", 4] = new Player("White King");
        board["H", 4] = new Player("Black King");
        
        Console.WriteLine("A4 = {0}", board["A", 4]);
        Console.WriteLine("H4 = {0}", board["H4"]);
    }
}