Firstly, your code is very difficult to read as you are ignoring C# coding conventions: you have a camelCase class name and a PascalCase variable name. So in my examples below, I've fixed that to make it easier for other folk, familiar with C# conventions, to read.
var result = MyGateway.SelectAll(p1, p2, p3);
This is an example of a locator antipattern. As MyGateway.SelectAll is static, there's no easy way to swap out the actual implementation for a simpler one when testing for example. So you are right to want to improve this.
However your proposed solution, along the lines of:
class SomeClass
{
private readonly MyGateway _myGateWay = new MyGateway();
public SelectAllResult SomeMethod()
{
...
var result = _myGateWay.SelectAll(p1,p2,p3);
...
}
}
isn't any better. You are still tightly coupling your class to MyGateway, again making testing harder than it need be.
A third solution, which overcomes these problems, is to use an interface and to pass an instance of a type that implements it into the constructor:
class SomeClass
{
private readonly IGateway _myGateway;
public SomeClass(IGateway myGateway)
{
_myGateway = myGateway;
}
public SelectAllResult SomeMethod()
{
...
var result = _myGateWay.SelectAll(p1,p2,p3);
...
}
}
This dependency injection approach decouples your class from MyGateway and makes testing far easier.