2015-02-06 3 views
1

У меня есть класс:Использование этого ключевого слова внутри параметра C#

public static class PictureBoxExtensions 
{ 
    public static Point ToCartesian(this PictureBox box, Point p) 
    { 
     return new Point(p.X, p.Y - box.Height); 
    } 

    public static Point FromCartesian(this PictureBox box, Point p) 
    { 
     return new Point(p.X, box.Height - p.Y); 
    } 
} 

Мой вопрос: что является использование ключевого слова this перед PictureBox, в отличие выходить из ключевого слова?

+0

См Edit. Я надеюсь, что это помогает. –

ответ

3

Метод расширения называется, как, например метод, но на самом деле является статическим методом. Указатель экземпляра «this» является параметром.

И: Вы должны указать это ключевое слово перед тем, как выбрать соответствующий метод.

public static class ExtensionMethods 
{ 
    public static string UppercaseFirstLetter(this string value) 
    { 
     // Uppercase the first letter in the string this extension is called on. 
     if (value.Length > 0) 
     { 
      char[] array = value.ToCharArray(); 
      array[0] = char.ToUpper(array[0]); 
      return new string(array); 
     } 
     return value; 
    } 
} 

class Program 
{ 
    static void Main() 
    { 
     // Use the string extension method on this value. 
     string value = "dot net perls"; 
     value = value.UppercaseFirstLetter(); // Called like an instance method. 
     Console.WriteLine(value); 
    } 
} 

см. http://www.dotnetperls.com/extension для получения дополнительной информации.

** Edit: попробуйте ниже пример раз и снова комментируя

pb.Location=pb.FromCartesian(new Point(20, 20)); 

, чтобы увидеть результат **

using System; 
using System.Drawing; 
using System.Windows.Forms; 

namespace WindowsFormsApplication1 
{ 
    public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      InitializeComponent(); 
     } 

     private void Form1_Load(object sender, EventArgs e) 
     { 
      PictureBox pb = new PictureBox(); 
      pb.Size = new Size(200, 200); 
      pb.BackColor = Color.Aqua; 
      pb.Location=pb.FromCartesian(new Point(20, 20)); 
      Controls.Add(pb); 
     } 
    } 

    public static class PictureBoxExtensions 
    { 
     public static Point ToCartesian(this PictureBox box, Point p) 
     { 
      return new Point(p.X, p.Y - box.Height); 
     } 

     public static Point FromCartesian(this PictureBox box, Point p) 
     { 
      return new Point(p.X, box.Height - p.Y); 
     } 
    } 
} 
4

Этот класс содержит методы расширения.

Ключевое слово this означает, что метод является расширением. Таким образом, метод ToCartesian в вашем примере расширяет PictureBox класс, так что вы можете написать:

PictureBox pb = new PictureBox(); 
Point p = pb.ToCartesian(oldPoint); 

Более подробную информацию о методах расширения см документацию на MSDN: https://msdn.microsoft.com/en-us/library/bb383977.aspx

+0

Это правильный ответ, не нужно его понижать! –

+0

Существует. Ваш первоначальный ответ: «Этот класс содержит методы расширения». В этом не было необходимости. Вы могли бы легко немного объяснить. –

+0

Терпение, должно быть. - Йода –

Смежные вопросы