Advertisement
MBrendecke

Interfaces

Mar 21st, 2018
160
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 2.00 KB | None | 0 0
  1. using System;
  2. using System.IO;
  3.  
  4. namespace ConsoleApp1 {
  5.     class Program {
  6.         static void Main(string[] args) {
  7.             var logger = new MyLogger<Exception>();
  8.             IWriteable<Exception> logger2 = new MyLogger2<Exception>();
  9.  
  10.             var reader = new MyReader<decimal>();
  11.             var writer = new MyWriter<string>();
  12.         }
  13.     }
  14.  
  15.     interface IReadable<out T> {
  16.         T Read(Stream s);
  17.     }
  18.  
  19.     interface IWriteable<in T> {
  20.         void Write(Stream s, T data);
  21.     }
  22.  
  23.     interface ILogger<T> : IReadable<T>, IWriteable<T> { }
  24.  
  25.     class MyLogger<T> : ILogger<T> {
  26.         public T Read(Stream s) {
  27.             throw new NotImplementedException();
  28.         }
  29.  
  30.         public void Write(Stream s, T data) {
  31.             throw new NotImplementedException();
  32.         }
  33.     }
  34.  
  35.     class MyLogger2<T> : IReadable<T>, IWriteable<T> {
  36.         public T Read(Stream s) {
  37.             throw new NotImplementedException();
  38.         }
  39.  
  40.         public void Write(Stream s, T data) {
  41.             throw new NotImplementedException();
  42.         }
  43.     }
  44.  
  45.     class MyReader<T> : IReadable<T> {
  46.         public T Read(Stream s) {
  47.             throw new NotImplementedException();
  48.         }
  49.     }
  50.  
  51.     class MyWriter<T> : IWriteable<T> {
  52.         public void Write(Stream s, T data) {
  53.             throw new NotImplementedException();
  54.         }
  55.     }
  56.  
  57.     abstract class MyAbstractLogger<T> : ILogger<T> {
  58.         public T Read(Stream s) {
  59.             try {
  60.                 return (T)new XmlSerializer(typeof(T)).Deserialize(s);
  61.             } catch (Exception) {
  62.                 throw;
  63.             }
  64.         }
  65.  
  66.         public void Write(Stream s, T data) {
  67.             try {
  68.                 new XmlSerializer(typeof(T)).Serialize(s, data);
  69.             } catch (Exception) {
  70.                 throw;
  71.             }
  72.         }
  73.     }
  74.  
  75.     class MyExceptionLogger : MyAbstractLogger<Exception> {
  76.  
  77.     }
  78.  
  79.     class MyStringLogger : MyAbstractLogger<string> {
  80.  
  81.     }
  82. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement