using System; using System.Linq; namespace AbstractionDemo { class Program { static void Main(string[] args) { TextFile tf = new TextFile("test.txt"); Console.WriteLine(tf.IsExist()); tf.Write("test"); FileFactory.ShowContent(tf); FileFactory.WriteFile(tf, "degistirilen icerik"); Console.WriteLine(FileFactory.ReadFile(tf)); BinaryFile bf = new BinaryFile("test_binary.dat"); Console.WriteLine(bf.IsExist()); var bytes = new byte[] { 0, 1, 2, 3, 4, 5 }; bf.Write(bytes); Console.WriteLine(bf.Length); FileFactory.ShowContent(bf); byte[] b = FileFactory.ReadFile(bf); b = b.Select(q => (byte)(q + 1)).ToArray(); FileFactory.WriteFile(bf, b); FileFactory.ShowContent(bf); } } public class FileFactory { //File class ile çalışıyoruz. Artık bizim için hangi dosya türü olduğunun bir önemi yok //Biz artık dosya işlemleri için türünden bağımsız olarak ortak metod yazabiliyoruz. public static void ShowContent<T>(File<T> file) { Console.WriteLine(file); } public static void WriteFile<T>(File<T> file, T content) { file.Write(content); } public static T ReadFile<T>(File<T> file) { return file.Read(); } } public abstract class File<T> { protected string Path { get; set; } private Type Type; public abstract T Read(); public abstract void Write(T content); public bool IsExist() => System.IO.File.Exists(Path); public File(string path, Type type) { Path = path; Type = type; } } public class TextFile : File<string> { public override string Read() { return System.IO.File.ReadAllText(Path); } public override void Write(string content) { System.IO.File.WriteAllText(Path, content); } //Text için özel Append Metodu oluşturduk. public void Append(string content) { System.IO.File.AppendAllText(Path, content); } public TextFile(string path) : base(path, typeof(string)) { } public override string ToString() { return Read(); } } public class BinaryFile : File<byte[]> { //Byte için ekstra özellik. public int Length => Read().Length; public override byte[] Read() { return System.IO.File.ReadAllBytes(Path); } public override void Write(byte[] bytes) { System.IO.File.WriteAllBytes(Path, bytes); } public BinaryFile(string path) : base(path, typeof(byte[])) { } public override string ToString() { return string.Join(" ", Read()); } } }