MBrendecke icon

Interfaces

MBrendecke | PRO | 03/21/18 09:31:29 AM UTC | 0 ⭐ | 518 👁️ | Never ⏰ | []
C# |

2 KB

|

None

|

0 👍

/

0 👎

using System;
using System.IO;
 
namespace ConsoleApp1 {
    class Program {
        static void Main(string[] args) {
            var logger = new MyLogger<Exception>();
            IWriteable<Exception> logger2 = new MyLogger2<Exception>();
 
            var reader = new MyReader<decimal>();
            var writer = new MyWriter<string>();
        }
    }
 
    interface IReadable<out T> {
        T Read(Stream s);
    }
 
    interface IWriteable<in T> {
        void Write(Stream s, T data);
    }
 
    interface ILogger<T> : IReadable<T>, IWriteable<T> { }
 
    class MyLogger<T> : ILogger<T> {
        public T Read(Stream s) {
            throw new NotImplementedException();
        }
 
        public void Write(Stream s, T data) {
            throw new NotImplementedException();
        }
    }
 
    class MyLogger2<T> : IReadable<T>, IWriteable<T> {
        public T Read(Stream s) {
            throw new NotImplementedException();
        }
 
        public void Write(Stream s, T data) {
            throw new NotImplementedException();
        }
    }
 
    class MyReader<T> : IReadable<T> {
        public T Read(Stream s) {
            throw new NotImplementedException();
        }
    }
 
    class MyWriter<T> : IWriteable<T> {
        public void Write(Stream s, T data) {
            throw new NotImplementedException();
        }
    }
 
    abstract class MyAbstractLogger<T> : ILogger<T> {
        public T Read(Stream s) {
            try {
                return (T)new XmlSerializer(typeof(T)).Deserialize(s);
            } catch (Exception) {
                throw;
            }
        }
 
        public void Write(Stream s, T data) {
            try {
                new XmlSerializer(typeof(T)).Serialize(s, data);
            } catch (Exception) {
                throw;
            }
        }
    }
 
    class MyExceptionLogger : MyAbstractLogger<Exception> {
 
    }
 
    class MyStringLogger : MyAbstractLogger<string> {
 
    }
}

Comments