Базовая ошибка в запросе SQL: следует добавить максимум около возраста:
>>> requete_sql = """
SELECT c.id, max(c.age), mean(v.vitesse)
FROM cyclistes as c , voyages as v
WHERE c.id == v.id GROUP BY c.id """
>>> spark.sql(requete_sql)
Я думаю, что Eric Lippert получает кавычки определения здесь:
Сам язык не имеет ничего, что делает это легким, но необходимо смочь сделать это путем создания конструкторов внутренними. Если Вы сделаете это, однако, то Вы не сможете к новому это от внешних блоков, таким образом, необходимо будет добавить метод фабрики.
public class Foo
{
internal Foo()
{
}
public Foo Create()
{
return new Foo();
}
}
Вот альтернатива, которая позволяет Вам новый класс во внешних блоках
public sealed class Foo : FooBase
{
}
public class FooBase
{
internal FooBase() { }
}
Один вопрос, который Вы могли бы задать сами, однако, состоит точно в том, почему Вы хотите, чтобы класс был изолирован. Иногда это неизбежно, но я видел sealed
ключевым словом злоупотребляют так часто, что я думал, что подниму его. Часто, разработчики изолируют классы, потому что они являются защитными из своего кода. Большую часть времени, если класс хорошо разработан, он не должен быть изолирован.
Если Ваш класс абстрактен, существует очень простой способ сделать это:
public abstract class Foo {
internal abstract void DoNothing();
// ... other members
}
Теперь, хотя Ваш класс и большинство участников общедоступны, внутренний абстрактный участник лишает возможности происходить из класса вне Вашего блока.
Единственным путем я могу думать, должен был бы использовать общедоступную обертку на внутреннем классе, вероятно, с единым интерфейсом:
public interface IFoo
{
}
internal class Foo : IFoo
{
}
public sealed class PublicFoo : IFoo
{
private Foo m_Foo = new Foo();
}
Вы не можете сделать этого с конструкциями языка, но попробовать отражением
public class MyClass{
public MyClass(){
if(this.GetType().Assembly != typeof(MyClass).Assembly){
throw new Exception("Can't derive from this type!");
}
}
Проверенный это. Кажется, работает. Единственная проблема состоит в том, что, если кто-то не читает документацию, проблема известна во времени выполнения.
Нет. На самом языке C# нет такого условия. Однако обходные решения - как предложили другие здесь - могут быть достаточными.