Csharp/CSharp Tutorial/Class/Extension
Содержание
Adding extension method for int
<source lang="csharp">using System; using System.Text; using System.Reflection; using System.Runtime.rupilerServices; public static class MyExtensions {
public static void DisplayDefiningAssembly(this object obj) { Console.WriteLine(obj.GetType().Name); Console.WriteLine(Assembly.GetAssembly(obj.GetType())); } public static int ReverseDigits(this int i) { char[] digits = i.ToString().ToCharArray(); Array.Reverse(digits); string newDigits = new string(digits); return int.Parse(newDigits); }
} class Program {
static void Main(string[] args) { int myInt = 987; myInt.DisplayDefiningAssembly(); Console.WriteLine("{0} is reversed to {1}", myInt, myInt.ReverseDigits()); Console.ReadLine(); }
}</source>
Adding extension to Stream
<source lang="csharp">using System.ruponentModel; using System.IO; using System.Net;
public static class StreamUtilWithExtensions { const int BufferSize = 8192; public static void CopyTo(this Stream input,Stream output) { byte[] buffer = new byte[BufferSize]; int read; while ((read = input.Read(buffer, 0, buffer.Length)) > 0) { output.Write(buffer, 0, read); } } public static byte[] ReadFully(this Stream input) { using (MemoryStream tempStream = new MemoryStream()) { CopyTo(input, tempStream); if (tempStream.Length == tempStream.GetBuffer().Length) { return tempStream.GetBuffer(); } return tempStream.ToArray(); } } }
class MainClass { static void Main() { WebRequest request = WebRequest.Create("http://nfex.ru"); using (WebResponse response = request.GetResponse()) using (Stream responseStream = response.GetResponseStream()) using (FileStream output = File.Create("data.dat")) { responseStream.CopyTo(output); } } }</source>
Adding reverse operation to string
<source lang="csharp">using System; using System.Collections.Generic; using System.Linq; using System.Text;
public static class ExtensionLibExtensions { public static string ReverseString(this string inputString) { return new string(inputString.ToCharArray().Reverse().ToArray()); } } class Program { static void Main(string[] args) { string sourceString = "this is a test"; Console.WriteLine("String backwards: {0}", sourceString.ReverseString()); } }</source>
Add title case to string class
<source lang="csharp">using System; using System.Collections.Generic; using System.Linq; using System.Text;
public static class ExtensionLibExtensions { public static string ToTitleCase(this string inputString, bool forceLower) { inputString = inputString.Trim(); if (inputString == "") { return ""; } if (forceLower) { inputString = inputString.ToLower(); } string[] inputStringAsArray = inputString.Split(" "); StringBuilder sb = new StringBuilder(); for (int i = 0; i < inputStringAsArray.Length; i++) { if (inputStringAsArray[i].Length > 0) { sb.AppendFormat("{0}{1} ", inputStringAsArray[i].Substring(0, 1).ToUpper(), inputStringAsArray[i].Substring(1)); } } return sb.ToString(0, sb.Length - 1); } } class Program { static void Main(string[] args) { string sourceString = "this is a test"; Console.WriteLine("String with title casing: {0}", sourceString.ToTitleCase(true)); } }</source>
conflicting extension methods
<source lang="csharp">using System;
public static class ExtensionMethods { public static string Substring(this string s, int startIndex, int endIndex) { if (startIndex >= 0 && startIndex <= endIndex && endIndex < s.Length) return s.Substring(startIndex, endIndex - startIndex); else return s; } } public class Tester{ public static void Main() { string hello = "Hello"; Console.WriteLine("hello.Substring(2, 3) = {0}", hello.Substring(2, 3)); } }</source>
extension method
<source lang="csharp">using System;
public static class ExtensionMethods { public static string Right(this string s, int n) { if (n < 0 || n > s.Length) return s; else return s.Substring(s.Length - n); } } public class Tester { public static void Main() { string hello = "Hello"; Console.WriteLine("hello.Right(-1) = {0}", hello.Right(-1)); Console.WriteLine("hello.Right(0) = {0}", hello.Right(0)); } }</source>
Extension Method On Null Reference
<source lang="csharp">using System; using System.ruponentModel;
static class NullUtil { public static bool IsNull(this object x) { return x == null; } } class MainClass { static void Main() { object y = null; Console.WriteLine(y.IsNull()); y = new object(); Console.WriteLine(y.IsNull()); } }</source>