Что ж, есть только один способ сделать это - разрешить доступ к вашему объекту только через статический метод, который принимает делегата. В качестве очень упрощенного примера (поскольку очевидно, что существует много разных способов открытия файла - чтение / запись и т. Д.):
public static void WorkWithFile(string filename, Action<FileStream> action)
{
using (FileStream stream = File.OpenRead(filename))
{
action(stream);
}
}
Если единственными вещами, способными создать экземпляр вашего одноразового объекта, являются методы в вашем собственном классе, вы можете убедиться, что они используются соответствующим образом. По общему признанию, ничто не мешает делегату взять копию ссылки и попытаться использовать ее позже, но это не совсем та же проблема.
Эта техника, конечно, сильно ограничивает то, что вы можете делать со своим объектом - но в некоторых случаях это может быть полезно.