Вызов не статического метода в статическом - C#
Формулировка задачи:
Добрых времени суток. Я знаю что для такого вызова можно просто создать экземпляр класса и тут же вызвать этот методОднако есть еще и вариант с делегатомСобственно вопрос, стоит ли заморачиваться с делегатом или нет?
public class Class1{ public Class1() { } private void NonStaticMethod(){ } private static void StaticMethod() { new Class1().NonStaticMethod(); } }
public class Class1{ public Class1() { nonStaticMethodAction = NonStaticMethod; } private static Action nonStaticMethodAction; private void NonStaticMethod(){ } private static void StaticMethod() { nonStaticMethodAction(); } }
Решение задачи: «Вызов не статического метода в статическом»
textual
Листинг программы
public class PhotoViewer: ContentView { public static readonly BindableProperty BackgroundImageCountProperty = BindableProperty.Create ( propertyName: nameof(BackgroundImageCount), returnType: typeof(int), declaringType: typeof(PhotoViewer), defaultValue: 3, defaultBindingMode: BindingMode.TwoWay, propertyChanged: OnBackgroundImageCountChenged ); public int BackgroundImageCount { get => (int)GetValue(BackgroundImageCountProperty); set => SetValue(BackgroundImageCountProperty, value); } private static void OnBackgroundImageCountChenged(BindableObject bindable, object oldValue, object newValue) { if(bindable != null) { //получаем объект StackLayout layout = (bindable as ContentView).Content as StackLayout; layout.Children.Clear(); //генерируем фото холдеры и добавялем их IList<View> holders = new PhotoViewer().GeneratePhotoHolders((int)newValue); // вот тут и происходит вызов //изменяем кол-во холдеров layout.Children.AddRange(holders); } } private string ImageName { get => "photoHolder"; } public PhotoViewer() { StackLayout stackLayout = new StackLayout() { Orientation = StackOrientation.Horizontal, HorizontalOptions = LayoutOptions.Center, BackgroundColor = BackgroundColor }; IList<View> holders = GeneratePhotoHolders(BackgroundImageCount); stackLayout.Children.AddRange(holders); this.Content = stackLayout; } private IList<View> GeneratePhotoHolders(int count) { List<View> holders = new List<View>(); //генерируем фото-холдеры for (int i = 0; i < count; i++) { holders.Add(new Image() { Source = ImageSource.FromFile(BackgroundImage), HeightRequest = 64, WidthRequest = 64, ClassId = $"{ImageName}{i}", HorizontalOptions = LayoutOptions.Center, Margin = new Thickness(7), Aspect = Aspect.AspectFit, }); } return holders; } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д