Вызов не статического метода в статическом - 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;
        }
    }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 4.455 из 5
Похожие ответы