Там какие-либо преимущества компилируют для Платформы.NET 3.5 вместо 2,0?

public class Rule : MonoBehaviour{}
Rule rule2 = new Rule();

Вы не можете использовать ключевое слово new для создания нового экземпляра, если вы наследуете его из MonoBehaviour.

Вы должны получить исключение, говорит :

Вы пытаетесь создать MonoBehaviour, используя ключевое слово 'new'. Это запрещено. MonoBehaviours можно добавлять только с помощью AddComponent (). Кроме того, ваш скрипт может наследовать от ScriptableObject или вообще никакого базового класса

. Ваш код работал бы, если у вас public class Rule {}, но у вас есть public class Rule : MonoBehaviour {}.

Создание нового экземпляра класса, полученного из MonoBehaviour:

Пример класса:

public class Rule : MonoBehaviour
{
    public Rule(int i)
    {

    }
}

Если вы наследуете MonoBehaviour, вы должны либо используйте GameObject.AddComponent или Instantiate для создания нового экземпляра.

Rule rule2 = null;
void Start()
{
  rule2 = gameObject.AddComponent<Rule>();
}

ИЛИ

public Rule rulePrefab;
Rule rule2;
void Start()
{
    rule2 = Instantiate(rulePrefab) as Rule;
}

Если скрипт Rule уже существуют и прикреплены к GameObject, вам не нужно создавать / добавлять / создавать новые экземпляры этого сценария. Просто используйте функцию GetComponent, чтобы получить экземпляр скрипта из GameObject, к которому он присоединен.

Rule rule2;
void Start()
{
    rule2 = GameObject.Find("NameObjectScriptIsAttachedTo").GetComponent<Rule>();
}

Вы заметите, что вы не можете использовать параметр в конструкторе, когда вы выводите свой скрипт из MonoBehaviour .



Создание нового экземпляра класса, который НЕ выводится из MonoBehaviour:

Пример класса: (Обратите внимание, что он не является результатом " MonoBehaviour "

public class Rule
{
    public Rule(int i)
    {

    }
}

Если вы не наследуете от MonoBehaviour, вы должны использовать ключевое слово new для создания нового экземпляра. Теперь вы можете использовать параметр в конструкторе, если вы хотите.

Rule rule2 = null;

void Start()
{
    rule2 = new Rule(3);
}

EDIT:

В последней версии Unity создается новый экземпляр скрипта, который наследует от MonoBehaviour с помощью new может не дать вам ошибку и не может быть null слишком , но все функции обратного вызова не будут выполняться . К ним относятся функции Awake, Start, Update и другие. , вы все равно должны сделать это правильно, как указано в начале этого ответа.

10
задан Sampson 23 February 2010 в 19:40
поделиться

8 ответов

Существует различие между компиляцией и предназначением.

При компиляции кода с (например), компилятор C# 3.0 будет, вероятно, стимулировать Вас на производительности (очень мало один так или иначе), поскольку некоторая оптимизация для сгенерированного кода IL, возможно, была включена. Это также позволяет Вам использовать некоторые новые функции как автоматические свойства или лямбда-выражения.

Быть предназначением для данной платформы гарантирует Ваши сборки для той платформы (и последующее поколение) и перестанет работать, если Вы будете нацелены для 2,0 и будете пользоваться 3,5 библиотеками. Никакие повышения производительности не будут непосредственно связаны со что если Ваша замена классом от одной платформы с другим "самым быстрым" классом. Например, предназначение для.NET 1.1 не позволит Вам использовать дженерики, и поэтому необходимо будет использовать ArrayList, который значительно медленнее, чем Список (из-за упаковки и распаковывания).

5
ответ дан 4 December 2019 в 00:27
поделиться

Существует две вещи помнить в отношении.NET 2.0 и.NET 3.5.

  1. Платформа.NET 3.5 является всего несколькими библиотеками, которые работают сверху.NET 2.0.
  2. При разработке в Visual Studio 2008 и предназначении для.NET 2.0 можно все еще использовать определенные функции C# 3.0 функции языка, такие как Дополнительные Методы, так как они - на самом деле функция C# 3.0 (или.NET 3.5) компилятор. См. эту ссылку: http://www.codethinked.com/post/2008/02/Using-Extension-Methods-in-net-20.aspx
2
ответ дан 4 December 2019 в 00:27
поделиться

Я не нашел никого. Очевидный недостаток, если Вам не нужны 3,5 определенных функции, то, что 3,5 кодовых базы моложе и поэтому возможны, хотя вряд ли, что существует некоторая ошибка, скрывающаяся вокруг.

1
ответ дан 4 December 2019 в 00:27
поделиться

Нет никакого преимущества для компиляции в 3,5 платформы, если Вы не используете классов от той версии платформы.

1
ответ дан 4 December 2019 в 00:27
поделиться

Я предполагаю, что необходимо означать быть нацеленными на.NET 3,5 платформы для компиляции? Раз так затем, поскольку другие сказали, что я не полагаю, что Вы будете видеть много различия.

Однако, если Вы говорите об использовании обновленных компиляторов затем существуют различные изменения и изменения повреждения, описанные и для C# и для VB в следующих ссылках:

1
ответ дан 4 December 2019 в 00:27
поделиться

Я полагаю, что другой компилятор поставлется с каждой версией Visual Studio. Например, в случае C# 2,0 компилятора, поставленные с Visual Studio 2005 и C# 3.0, поставленный с Visual Studio 2008. В зависимости от которой версии Visual Studio Вы используете Вас, заканчиваются с другим компилятором.

Предназначение для платформы относится к конкретно, для какой версии платформы Вы хотите быть нацеленными во время процесса компиляции; предназначение для платформ является новой возможностью Visual Studio 2008. Например, я мог иметь решение, открытое в Visual Studio 2008, и нацелен на v2.0 .NET. Результат состоял бы в том, что у меня не будет ни одной из 3,0 или 3,5 функций .NET доступной мне во время той компиляции, например, WPF.

1
ответ дан 4 December 2019 в 00:27
поделиться

3.5 имеет классы, который 2.0 не делает. Func <...>, например. Если Вы стремитесь 2.0, Вы не можете использовать их.

0
ответ дан 4 December 2019 в 00:27
поделиться

Если Ваш блок.NET будет предназначаться для.NET 3.5, то получающееся приложение будет искать и требовать.NET 3,5 библиотеки, и это - это. Эти библиотеки идут многочисленный дополнительный классифицируемый не найденный в.NET 2,0 платформы, так, чтобы было бы преимущество для предназначения для тех библиотек.

Если Вы однако скомпилируете код C# с компилятором C# 3.0, поставлющимся с, например, Visual Studio 2008 и удовлетворенный для.NET 3.5, но иметь Вашу цель блока.NET 2.0, то Вам все еще только будет нужна регулярная.NET, 2,0 библиотеки, и несмотря на это на самом деле используют определенную.NET 3,5 функции компилятора, поскольку много тех функций только используют.NET 2,0 кода в конце. Читайте больше об этом здесь: http://weblogs.asp.net/shahar/archive/2008/01/23/use-c-3-features-from-c-2-and-net-2-0-code.aspx

1
ответ дан 4 December 2019 в 00:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: