Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 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> {
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement