"И этой хохмой он хочет удивить всю Одессу?" ©

May 28, 2008 17:00

В #2/2008 argc&argv прочитал чудную статью за авторством Татьяны Поляковой. Статья называется "Что нового в C# 3.0?" Цитировать статью не буду, кто читает - сам найдёт места в ней, кто не читает, но "в теме" - знает, как реализованы эти возможности в C#. А кто "не в теме", тому это не особенно и надо. Ну что, поехали?..

Неявное задание типа:

Availability: ActionScript 1.0; Flash Player 5

var str = "Hello, world!";
var someVar = this;
var someArr = ["1","2","3"];
var someFunc = this.attachMovie;

trace("Type of str: "+typeof(str)); //Type of str: string
trace("Type of someVar: "+typeof(someVar)); //Type of someVar: movieclip
trace("Type of someArr: "+typeof(someArr)); //Type of someArr: object
trace("Content of someArr: "+someArr); //Content of someArr: 1,2,3
trace("Type of someFunc: "+typeof(someFunc)); //Type of someFunc: function

А на функцию через var в C# сослаться слабо? =)

Теперь варианты:

var str; - вполне нормально компилируется, несмотря на то, что переменная не инициализирована значением (в действительности она всё же инициализируется значением undefined и становится типа undefined)

Массивы могут в себе содержать элементы разных типов без ограничений:

var someArr = ["Flash","is",true,"C#",3.0,"is",false];
trace("Type of someArr: "+typeof(someArr)); //Type of someArr: object
trace("Content of someArr: "+someArr); //Content of someArr: Flash,is,true,C#,3,is,false

Автоматические свойства:

Availability: ActionScript 2.0; Flash Player 6

Листинг класса:
class Contact {
private var _yob:Number;
public var Name:String;

function set YearOfBirth(value:Number) {
if (value >= 1900 && value <= 2008)
this._yob=value;
else
this._yob=0;
}

function get YearOfBirth() {
return this._yob;
}
}

Пример использования:
import Contact;

var myContact:Contact = new Contact();

myContact.YearOfBirth = 1945;
trace(myContact.YearOfBirth); //1945

myContact.YearOfBirth = 3000;
trace(myContact.YearOfBirth); //0

myContact.Name = "John Doe";
trace(myContact.Name); //John Doe

Инициализаторы объекта:

Availability: ActionScript 1.0; Flash Player 5

var myObj = {Name:"John Doe",YearOfBirth:1945};
trace(typeof(myObj)); //object
trace(myObj.Name); //John Doe

К сожалению, таким образом нельзя инициализировать объект класса отличного от "Object". Тут, надо признать, Micro$oft ActionScript делает.

Инициализаторы коллекций:

Availability: ActionScript 1.0; Flash Player 5

Ну тут всё просто:

var Contacts = [
new Contact({Name:"John",YearOfBirth:1980}),
new Contact({Name:"Mary",YearOfBirth:1986}),
new Contact({Name:"Richard",YearOfBirth:1948})
];

Анонимные типы:

Availability: ActionScript 1.0; Flash Player 5

var contact1 = {
id:"54321",
Name:"Wei-Meng Lee",
email:"weimenglee@learn2develop.net",
myName:function(){trace("My name is "+this.Name)} //Метод в качестве бонуса
};

contact1.myName(); //My name is Wei-Meng Lee

Выражение Lambda:

Availability: ActionScript 1.0; Flash Player 6

this.onMouseUp = function(){trace("Mouse released on "+this+" movieclip");}

LINQ:

Нет, так как нет нативной поддержки SQL.

Методы расширения:

Availability: ActionScript 1.0; Flash Player 6

Point.prototype.DistanceFromThisPointTo = function(PointB:Point){
return Math.sqrt(
Math.pow((this.x - PointB.x),2) +
Math.pow((this.y - PointB.y),2));
}

Частичные методы:

Решается, в зависимости от случая, использованием прототипов или интерфейсов. Причём, без таких чудовищных ограничений.

Выводы:

Буду краток.

Нумберо уно: нового в C# 3.0 ничего. Большинство "фич" были реализованы (проще и качественнее) ещё в Flash Player 5, на ActionScript 1.

Нумберо дос: пока Micro$oft пищит про то, что Silverlight убийца Flash, последний задвигает C# и вообще всю .NET платформу. =)

Несогласных прошу в камменты. Холиварить не рекомендую.

c#, silverlight, flash, мыльный пузырь, .net, adobe flash, маразм, oop, ООП, micro$oft

Previous post Next post
Up