Изменения в пользовательском интерфейсе могут выполняться с помощью методов Control.Invoke (), это исключение перекрестного потока может быть разрешено с использованием фрагмента кода.
void UpdateWorker()
{
//Here ddUser is the user control
//Action to be performed should be called within { } as like below code
if (this.ddUser.InvokeRequired)
ddUser.Invoke(new MethodInvoker(() => { ddUser.Size = new Size(100, 100); }));
}
class C
defines a class, just as in Java or C++.object O
creates a singleton object O
as instance of some anonymous class; it can be used to hold static members that are not associated with instances of some class.object O extends T
makes the object O
an instance of trait T
; you can then pass O
anywhere, a T
is expected.class C
, then object C
is the companion object of class C
; note that the companion object is not automatically an instance of C
.Also see Scala documentation for object and class.
Most often, you need an object
to hold methods and values/variables that shall be available without having to first instantiate an instance of some class.
Это использование тесно связано с статическими
членами в Java.
object A {
def twice(i: Int): Int = 2*i
}
Вы можете затем вызвать вышеуказанный метод, используя A.twice (2)
.
If дважды
] были членом некоторого класса A
, тогда вам нужно сначала создать экземпляр:
class A() {
def twice(i: Int): Int = 2 * i
}
val a = new A()
a.twice(2)
Вы можете видеть, насколько это избыточно, поскольку дважды
не требует никакого экземпляра - конкретные данные.
Вы также можете использовать сам объект
как некоторый специальный экземпляр класса или признака.
Когда вы делаете это, ваш объект должен расширить некоторую черту
, чтобы стать экземпляром его подкласса.
Рассмотрим следующий код:
object A extends B with C {
...
}
Это объявление сначала объявляет анонимный (недоступный) класс, который расширяет как B
, так и C
, и создает один экземпляр этого класса с именем A
.
Это означает, что A
может передаваться функциям, ожидающим объекты типа B
или C
, или B с C
.
Там также Есть некоторые особенности объектов в Scala. I recommend to read the official documentation.
def apply(...)
enables the usual method name-less syntax of A(...)
def unapply(...)
allows to create custom pattern matching extractorsКласс точно так же, как любой другой класс на других языках. Вы определяете класс точно так же, как любой другой язык с некоторым различием в синтаксисе.
class Person(val name: String)
val me = new Person("My name")
Однако объект является классом с отдельным объектом только. Это делает это интересным, поскольку это может использоваться для создания статических членов класса с помощью сопутствующий объект . Этот сопутствующий объект имеет доступ к членам парламента, не занимающим официального поста определения класса, и это имеет то же имя как класс, который Вы определяете.
class Person(var name: String) {
import Person._
def hi(): String = sayHello(name)
}
object Person {
private def sayHello(name: String): String = "Hello " + name
}
val me = new Person("My name")
me.hi()
кроме того, примечательная точка - то, что класс объекта лениво создается, который является другим важным моментом. Так, они не инстанцируют, если они не необходимы в нашем коде.
при определении создания соединения для JDBC можно создать их в объекте избежать дублирования точно так же, как мы делаем в Java с одноэлементными объектами.
Класс
- это определение, описание. Он определяет тип с точки зрения методов и состава других типов.
Объект
является синглтоном - экземпляром класса, который гарантированно уникален. Для каждого объекта
в коде создается анонимный класс, который наследуется от тех классов, которые вы объявили объект
для реализации. Этот класс нельзя увидеть из исходного кода Scala, хотя вы можете получить его через отражение.
Существует связь между объектом
и классом
. Объект считается сопутствующим объектом класса, если они имеют одно и то же имя. Когда это происходит, каждый из них имеет доступ к методам частной
видимости в другом. Однако эти методы не импортируются автоматически. Вы должны либо импортировать их явно, либо добавить к ним имя класса / объекта.
Например:
class X {
// class X can see private members of object X
// Prefix to call
def m(x: Int) = X.f(x)
// Import and use
import X._
def n(x: Int) = f(x)
private def o = 2
}
object X {
private def f(x: Int) = x * x
// object X can see private members of class X
def g(x: X) = {
import x._
x.o * o // fully specified and imported
}
}
Объект имеет ровно один экземпляр (вы не можете вызвать новый MyObject
). У вас может быть несколько экземпляров класса.
Объект служит тем же (и некоторым дополнительным) целям , что и статические методы и поля в Java.
Определение объекта в Scala похоже на определение класса в Java, который имеет только статические методы. Однако в Scala объект может расширять другой суперкласс, реализовывать интерфейсы и передаваться, как если бы он был экземпляром класса. (Так что это похоже на статические методы класса, но лучше).