Как вызвать универсальное свойство из другого универсального метода - PullRequest
0 голосов
/ 31 декабря 2018

Вот мой универсальный метод, из которого я хочу вернуть объект класса

 public class TestBase
{
    public T NavigateandReturntheObject<T>() where T : new()
    {
        //do navigate to page stuff and return the page object

        //previously it was - return new T();

        //Now i want to do something like this
        return PageObjectBase<T>.PageObject;
    }
}

Выше метода, вызывающего приведенный ниже статический универсальный класс, который будет обрабатывать создание объекта определенного класса

 public static class PageObjectBase<T> where T : class, new()
{
    private static T singleTonObject;
    public static T PageObject
    {
        get
        {
            return InstanceCreation();
        }
    }

    public static T InstanceCreation()
    {
        if (singleTonObject == null)
        {
            singleTonObject = new T();
        }

        return singleTonObject;
    }

}

Как я могу вызвать свойство PageObject из моего базового класса теста, пожалуйста, совет.Примечание. Я провел поиск по форуму и нашел ответы, относящиеся к универсальному методу, к вызову другого универсального метода. То же самое достигается с помощью рефлексии. Можем ли мы использовать рефлексию и в моем случае?Если так, то как мы можем это сделать?

1 Ответ

0 голосов
/ 31 декабря 2018

Вы можете добавить еще одно ограничение 'class' в NavigateandReturntheObject

public T NavigateandReturntheObject<T>() where T : class,new()

Полный код.

public class TestBase
{
    public T NavigateandReturntheObject<T>() where T : class,new()
    {
        //do navigate to page stuff and return the page object

        //previously it was - return new T();

        //Now i want to do something like this
        return PageObjectBase<T>.PageObject;
    }
}

Демонстрационный код

public class TestClass
{
    public string Name{get;set;}
    public TestClass()
    {
        Name = "Dummy Name";
    }
}

var testBase = new TestBase();
var sample = testBase.NavigateandReturntheObject<TestClass>();
Console.WriteLine(sample.Name);

Вывод

Dummy Name
...