Csharp/C Sharp/LINQ/Extension Method — различия между версиями
Admin (обсуждение | вклад) м (1 версия) |
|
(нет различий)
|
Версия 18:31, 26 мая 2010
Содержание
Add Extension method
<source lang="csharp"> using System; using System.Collections; using System.Collections.Generic; using System.Text; using System.IO; using System.Reflection; using System.Linq; using System.Xml; using System.Xml.Linq; public static class Extensions {
public static string SpaceToUnderscore(this string source) { char[] cArray = source.ToCharArray(); string result = null; foreach (char c in cArray) { if (Char.IsWhiteSpace(c)) result += "_"; else result += c; } return result; }
} class Program {
static void Main(string[] args) { string s = "This is a test"; Console.WriteLine(s.SpaceToUnderscore()); }
}
</source>
Extension method for integer
<source lang="csharp">
using System; static class MainClass {
public static int ConvertToBase(this int i, int baseToConvertTo) { if (baseToConvertTo < 2 || baseToConvertTo > 10) throw new ArgumentException("Value cannot be converted to base " + baseToConvertTo.ToString()); int result = 0; int iterations = 0; do { int nextDigit = i % baseToConvertTo; result += nextDigit * (int)Math.Pow(10, iterations); iterations++; i /= baseToConvertTo; } while (i != 0); return result; } static void Main() { try { int x = 591; for (int i = 2; i <= 10; i++) { Console.WriteLine("{0} in base {1} is {2}", x, i, x.ConvertToBase(i)); } } catch (Exception ex) { Console.WriteLine("Exception: {0}", ex.Message); } }
}
</source>
Extension Methods Discoverability
<source lang="csharp"> using System; class Class1 { } class Class2 {
public void Method1(string s) { Console.WriteLine("Class2.Method1"); }
} class Class3 {
public void Method1(object o) { Console.WriteLine("Class3.Method1"); }
} class Class4 {
public void Method1(int i) { Console.WriteLine("Class4.Method1"); }
} static class Extensions {
static public void Method1(this object o, int i) { Console.WriteLine("Extensions.Method1"); } static void Main() { new Class1().Method1(12); // Extensions.Method1 is called new Class2().Method1(12); // Extensions.Method1 is called new Class3().Method1(12); // Class3.Method1 is called new Class4().Method1(12); // Class4.Method1 is called }
}
</source>
Object Initializer
<source lang="csharp"> using System; using System.Collections.Generic; using System.Diagnostics; class MyPC {
public Int32 Id { get; set; } public Int64 Memory { get; set; } public String Name { get; set; }
} public class MainClass {
static void Main(string[] args) { var processes = new List<MyPC>(); foreach (var process in Process.GetProcesses()) { processes.Add(new MyPC { Id = process.Id, Name = process.ProcessName, Memory = process.WorkingSet64 }); } }
}
</source>