IronRuby 호출 C# 확장 방법 - 오류 - .NET 3.5의 호환성
-
13-09-2019 - |
문제
Hidecolumns라는 DatagridView에서 확장 메소드를 작성했습니다.
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라는 변수로 그리드를 Ironruby 스크립트로 전달합니다.
내 스크립트가 main_grid.hidecolumns ( "FirstName", "lastName") 호출되면 스크립트는 스크립트에 오류가 발생하여 System.Windows.Forms.datagrIdView :: Windows :: Forms :: DataGRIDView의 스크립트에 오류가 발생합니다.
확장 방법은 C#에서 잘 작동하는 것 같습니다. 무엇을 제공합니까?
해결책
FWIW, IronRuby 1.1 (Need .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")
또는 DataGridView에서 파생 된 C#에서 새 클래스를 작성하고 메소드를 추가하십시오.
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 Class가 양식 에서이 클래스를 사용하십시오.
JDUNKERYLY의 답변에 대한 의견에서 언급 했으므로 루비 쪽에서 그리드를 확장하는 방법은 다음과 같습니다. 수업을 열고 메소드를 추가하십시오 (루비 쪽에서 만 작동).
class System::Windows::Forms::DataGridView
def hide_columns(*columnNames)
column_names.each do |cn|
self.columns[cn].visible = false
end
end
end
확장 방법을 직접 사용하라는 제안에 따라, Params 키워드는 Ironruby에 고통 스럽습니다. 인수와 함께 타이핑 된 배열을 구축하고 전달해야합니다. 루비 끈을 루비 어레이로 감을 수는 없습니다. 나는 오늘 일찍 이것을 a 블로그 게시물. 그러나 당신이 그것을 처리 할 수있는 더 부드러운 방법이 있다면, 저에게 알려주십시오.