IronRuby Calling C # ملحق طرق - خطأ - التوافق في .NET 3.5
-
13-09-2019 - |
سؤال
لقد كتبت طريقة تمديد قبالة DataGridView تسمى HIDECOLUMENS.
public static class Extensions
{
public static void HideColumns(this DataGridView dataGridView, params string[] columnNames)
{
foreach (string str in columnNames)
{
if (dataGridView.Columns[str] != null)
{
dataGridView.Columns[str].Visible = false;
}
}
}
}
اجتاز الشبكة الخاصة بي إلى برنامج نصي للميكروبري كمتغير يسمى Main_Grid
عندما يستدعي البرنامج النصي الخاص بي main_grid.hidecolumns ("الاسم الأول"، "اسم العائلة") ينفث البرنامج النصي مع الخطأ في طريقة غير محددة في البرنامج النصي "HIDECOLUMS" ل System.windows.forms.datagridview: System :: Windows :: Forms :: DataGridView
يبدو أن طرق التمديد تعمل بخير من C #. ما يعطي؟
المحلول
FWIW، IronRuby 1.1 (الاحتياجات .NET 4) يوفر using_clr_extensions
الطريقة - كما لوحظ في الإصدار ملاحظات تطبق جميع أساليب الإرشاد المحددة على الفئات المعرفة في مساحة اسم معينة، بغض النظر عن الجمعية المعروفة؛ ستظهر التجميعات المحملة في المستقبل التي تحدد أساليب الإرشاد في مساحة الاسم المنشط تلقائيا على الأنواع الصحيحة، مثل هذا:
load_assembly "System.Core"
using_clr_extensions System::Linq
# ...
products.
where(lambda { |p| p.units_in_stock == 0 }).
each { |x| puts x.product_name }
تشير ملاحظات الإصدار أيضا إلى مجموعة كاملة من الأمثلة في http://github.com/ironruby/ironruby/blob/master/languages/ruby/samples/linq/101samples.rb.
نصائح أخرى
طريقة التمديد هي مجرد سكر تركلي، ستحتاج إلى الاتصال به على النحو التالي:
Extensions.HideColumns(main_grid, "FirstName", "LastName")
بدلا من إنشاء فئة جديدة في C # التي تستمد من DataGridView وإضافة الطريقة:
public class DataGridViewExt : DataGridView
{
public void HideColumns(params string[] columnNames)
{
foreach (string str in columnNames)
{
if (this.Columns[str] != null)
{
this.Columns[str].Visible = false;
}
}
}
}
واستخدام هذا الفصل بدلا من System.windows.forms فئة على النموذج الخاص بك.
منذ أن ذكرت ذلك في التعليقات على إجابة JDunkeryly، إليك كيف يمكنك تمديد الشبكة من جانب روبي. فقط افتح الفصل وإضافة طريقة (يعمل فقط من الجانب الروبي).
class System::Windows::Forms::DataGridView
def hide_columns(*columnNames)
column_names.each do |cn|
self.columns[cn].visible = false
end
end
end
فيما يتعلق بالاقتراح لاستخدام طريقة التمديد مباشرة، فإن Params Keyword هي مؤلمة لطي الملابس. تحتاج إلى إنشاء مجموعة مكتوبة مع حججك وتمريرها. لا يمكنك فقط لف سلاسل روبيك في صفيف روبي. لقد سحبت هذا في وقت سابق اليوم في مشاركة مدونة. وبعد ولكن إذا كان لديك طريقة أكثر سلاسة للتعامل مع ذلك، فيرجى إخبارنا بذلك.