Форум Игромании

Форум Игромании (http://forum.igromania.ru/index.php)
-   Программирование (http://forum.igromania.ru/forumdisplay.php?f=243)
-   -   C# (http://forum.igromania.ru/showthread.php?t=114386)

[CCCP] Monster 02.10.2010 14:06

C#
 
C# (произносится си-шарп) — объектно-ориентированный язык программирования. Разработан в 1998—2001 годах группой инженеров под руководством Андерса Хейлсберга в компании Microsoft как основной язык разработки приложений для платформы Microsoft .NET. Компилятор с C# входит в стандартную установку самой .NET, поэтому программы на нём можно создавать и компилировать даже без инструментальных средств, вроде Visual Studio.

C# относится к семье языков с C-подобным синтаксисом, из них его синтаксис наиболее близок к C++ и Java. Язык имеет статическую типизацию, поддерживает полиморфизм, перегрузку операторов (в том числе операторов явного и неявного приведения типа), делегаты, атрибуты, события, свойства, обобщённые типы и методы, итераторы, анонимные функции с поддержкой замыканий, LINQ, исключения, комментарии в формате XML.

Переняв многое от своих предшественников — языков C++, Java, Delphi, Модула и Smalltalk — С#, опираясь на практику их использования, исключает некоторые модели, зарекомендовавшие себя как проблематичные при разработке программных систем: так, C# не поддерживает множественное наследование классов (в отличие от C++).

Особенности языка:

Скрытый текст:
C# разрабатывался как язык программирования прикладного уровня для CLR и, как таковой, зависит, прежде всего, от возможностей самой CLR. Это касается, прежде всего, системы типов C#, которая отражает BCL. Присутствие или отсутствие тех или иных выразительных особенностей языка диктуется тем, может ли конкретная языковая особенность быть транслирована в соответствующие конструкции CLR. Так, с развитием CLR от версии 1.1 к 2.0 значительно обогатился и сам C#; подобного взаимодействия следует ожидать и в дальнейшем. (Однако эта закономерность была нарушена с выходом C# 3.0, представляющим собой расширения языка, не опирающиеся на расширения платформы .NET.) CLR предоставляет C#, как и всем другим .NET-ориентированным языкам, многие возможности, которых лишены «классические» языки программирования. Например, сборка мусора не реализована в самом C#, а производится CLR для программ, написанных на C# точно так же, как это делается для программ на VB.NET, J# и др.

Kentаvr 02.10.2010 14:46

По памяти отмечу, что наш усатый на первом-втором курсе из литературы особо напирал на Гради Буча, Эндрю Троелсена и Г. Шильда. Если кому нужно, второго могу и залить.

OneHalf 03.10.2010 11:19

Просветите меня, как обрабатывать xml?
Есть у меня такой xml:
Код:

<?xml version="1.0" encoding="UTF-8"?>
<Model xmlns="http://www.esi-group.com/ns/VAOne" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.esi-group.com/ns/VAOne http://www.esi-us-rd.com/xml/schemas/VAOne/rev2/VAOne.xsd" name="Cube" note="">
        <Version>1.1.0</Version>
        <GlobalFrequencyDomain>
                <FrequencyDomain start_freq="16" end_freq="8000" domain_type="2"/>
        </GlobalFrequencyDomain>
        <SolveOptions override_wavefields="false" beam_flexure_x="true" beam_flexure_y="true" beam_extension="true" beam_torsion="true" plate_extension="true" plate_flexure="true" plate_shear="true" average_radeff="false" symmetric_SEA_matrix="true" acoustic_pressure="true" compute_variance="false" solution_type="eHybrid" hybrid_quick="false" hybrid_quicknum="6" vsea_steps="20" override_eigen_frequencies="false" eigenlocallow="-5" eigenlocalhi="17826" eigengloballow="-5" eigenglobalhi="10695.6" local_mass="true" local_modes="false" modes="true" override_local_eigen_frequencies="false" override_global_eigen_frequencies="false" superelement_analysis="false" senqset="500" recover_fe_rad_eff="true" recover_nodal_eu="true" overrideGlobalAcousticEigenFreqs="false" getLocalAcousticModesInBand="true" minGlobalAcousticEigenValueFreq="-5" maxGlobalAcousticEigenValueFreq="10695.6" getAcousticModes="true" recoverBEM="true" overrideFEAcousticJunctionEps="false" feacousticJunctionEps="1e-006" recoverFEAcoustic="true">
                <BulkDataCards/>
                <ControlCards/>
        </SolveOptions>
        <Nodes>
                <Node node_id="1" x="0" y="0" z="0"/>
                <Node node_id="2" x="0" y="1" z="0"/>
                <Node node_id="3" x="1" y="0" z="0"/>
                <Node node_id="4" x="1" y="1" z="0"/>
                <Node node_id="5" x="0" y="0" z="1"/>
                <Node node_id="6" x="0" y="1" z="1"/>
                <Node node_id="7" x="1" y="0" z="1"/>
                <Node node_id="8" x="1" y="1" z="1"/>
                <Node node_id="9" x="0.2" y="0.2" z="1"/>
                <Node node_id="10" x="0.2" y="0.8" z="1"/>
                <Node node_id="11" x="0.8" y="0.2" z="1"/>
...
...

Пытаюсь загрузить его в свою программу:
Код:

public class AutoSeaModel {
        public XmlDocument xDoc = new XmlDocument();
        public XmlElement xRoot;
        String fileName;

        public SortedDictionary<int, Node> nodes = new SortedDictionary<int, Node>();
        public SortedDictionary<int, Face> faces = new SortedDictionary<int, Face>();
        public SortedDictionary<String, Shell> shells = new SortedDictionary<String, Shell>();
        public SortedDictionary<String, Cavity> cavities = new SortedDictionary<String, Cavity>();

        public AutoSeaModel(String fileName)
        {
            this.fileName = fileName;
            xDoc.Load(fileName);
            xRoot = xDoc.DocumentElement;

            XmlNodeList xNodes = xDoc.SelectNodes("/Model/Nodes/Node");
            foreach(XmlElement xNode in xNodes) {
                Node newNode = new Node(this, xNode);
                nodes.Add(newNode.node_id, newNode);
            }

            XmlNodeList xFaces = xDoc.SelectNodes("/Model/Faces/FlatPlateFace");
            foreach (XmlElement xFace in xFaces)
            {
  ...
  ...

Вопрос мой в том, как использовать XPath?
По моим соображениям строка

XmlNodeList xNodes = xDoc.SelectNodes("/Model/Nodes/Node");

Должна вернуть набор XmlElement'ов, каждый из которых должен соответствовать строке типа

<Node node_id="1" x="0" y="0" z="0"/>

Но метод SelectNodes все время возвращает мне пустой список. Что я делаю не так?

Upd:
Все дело оказалось в пространстве имен XML. Помогла эта статья:
http://codehelper.ru/questions/102/n...ml-c-namespace

Bad Gateway 22.01.2011 20:08

Это вроде просто, но я не знаю как. Подскажите, если не трудно.

Berckyt 31.01.2011 00:14

Bad Gateway, еще нужна помощь?

Mad-Dan 31.01.2011 01:03

надо задать размер матрицы nxm, и после чего загнать в матрицу числа. Как создать матрицу я понимаю. Но как лучше заполнить матрицу, мне не совсем ясно. Вызывать каждый раз диалоговое окно и просить ввести в поле i,j элемент не вариант. Загонять из файла тоже. Возможно ли создать как-нибудь сразу таблицу, которую можно будет заполнить, после чего передать данные в массив?

Berckyt 31.01.2011 01:09

Таблицу можно создать с помощью контрола DataGridView

CMETAHA 23.02.2011 13:22

Реквестирую сюда мини срачик о том что лучше c# или Java. Заодно и мне объясните.

OneHalf 23.02.2011 14:10

Жила-была Java. Microsoft обиделся, что яву придумали не они и решил сделать свою, с блек джеком и девками.

В принципе языки очень похожи даже синтаксисом (хоть я и не вникал в C# так как в яву, но это и так заметно).

CMETAHA 23.02.2011 14:24

Цитата:

Сообщение от OneHalf (Сообщение 9068466)
Жила-была Java. Microsoft обиделся, что яву придумали не они и решил сделать свою, с блек джеком и девками.

Получается что шарп лучше т.к. там есть блек джек и девки))

Hast 23.02.2011 15:17

Ява лучше уже потому, что она кроссплатформанная.

OneHalf 23.02.2011 15:58

CMETAHA, основная моя мысль в том, что изучать можно любой из этих языков, а потом легко мигрировать на другой (сделать замену "import" <-> "using" :D ).
Единственное, чего мне хотелось бы в Java из C#, это перегрузка стандартных операторов, сеттеры и геттеры:

Перегрузка операторов:
Скрытый текст:
Код:

// C#
public class MyClass {
    public MyClass operator+(MyClass firstValue, MyClass secondValue) {
        return ...;
    }
}

Тогда можно так:
Код:

newMyObj = myObj1 + myObj2;
вместо такого
Код:

// Java
public class MyClass {
    public static MyClass add(MyClass firstValue, MyClass secondValue) {
        return ...;
    }
}

Код:

newMyObj = MyClass.add(myObj1, myObj2));


сеттеры и геттеры:
Скрытый текст:
Код:

//C#:
public class SomeClass {
    private MyClass fMyValue;

    public MyClass myValue {
        get {
            return fMyValue;
        }
        set {
            // Здесь можно выкинуть исключение, если value не подходит
            fMyValue = value;
        }
    }
}

А далее инкапсулированное поле используется как открытая переменная:
Код:

SomeClass someObject;

...

someObject.myValue = ...;
... = someObject.myValue;

Java:
Код:

//Java
public class SomeClass {
    private MyClass myValue;

    public MyClass getMyValue {
            return myValue;
        }

    public void setMyValue(MyClass value) {
            // Здесь можно выкинуть исключение, если value не подходит
            this.myValue = value;
    }
}

А далее нужно использовать методы:
Код:

SomeClass someObject;

...

someObject.setMyValue(...);
... = someObject.getMyValue();


CMETAHA 23.02.2011 16:12

Hast, А как же mono?

emptily 23.02.2011 18:27

Смысл шарпа вообще не ясен. Заставляет таскать с собой громоздкий фреймворк, при этом не предоставляя основой и главной фичи java и jre - кроссплатформенности, и отсутствия необходимости в перекомпиляции под платформу. А при этом к тому же еще и производительность страдает. Java лучше.

По истории срачей между M$ и Sun можно тут почитать про J# и C#. Про блэкджек уже сказали выше.

Цитата:

А как же mono?
Там все равно полноценной поддержки майкрософтовских технологий нет, компанию его разрабатывающую вообще продали недавно и под никсами он не нужен. Те кто C# любят пусть кодят под винду.

Arantar 24.02.2011 18:21

Код:

        Console.WriteLine("\nОтвет: " + y);

        Console.WriteLine("Округлить до n чисел после запятой, введите n...");
                                                                 
        buf = Console.ReadLine();
        byte n = Convert.ToByte(buf);

        Console.WriteLine("\nОтвет: " + Math.Round(y, n));
        }
    }
}

Как сделать так, чтобы строки "Округлить до n чисел после запятой, введите n..." и само n исчезли при при его вводе, и остались только ответы.

OneHalf 24.02.2011 19:27

Console.Clear(); ?

Arantar 24.02.2011 19:41

OneHalf, оно вроде. Спасибо.

А не подскажите ещё как развилку сделать там же, наподобие "Округлить до n чисел после запятой? Если да - нажмите то-то, если нет то-то", при ответе нет - выходит.

OverDoser 01.03.2011 18:46

Цитата:

Сообщение от Arantar (Сообщение 9072514)
OneHalf, оно вроде. Спасибо.

А не подскажите ещё как развилку сделать там же, наподобие "Округлить до n чисел после запятой? Если да - нажмите то-то, если нет то-то", при ответе нет - выходит.

Можно использовать
Цитата:

/*инициализация caseSwitch*/
switch (caseSwitch)
{
case У:/*что делать при вводе чего-то(У)*/
break;
case Х:
/*что делать при вводе чего то (X)*/
break;
default:

/*делаем,если введено что-то другое*/

}
Надеюсь знаем такое?(расписал если вдруг не знаете).
А в вашем случае делаем стринг.
К примеру если вводите N-округляем(
Цитата:

case N:
/нужные действия/
break;
)если вводите M-не округляем(
Цитата:

case M:
/*нужные действия*/
break;
)
Ну и если другое,то(
Цитата:

default:
/*нужные действия*/
break;}//закрываем начало switch(зададите сами)
)

Mad-Dan 15.03.2011 01:53

разбираюсь с dataGridView.

с помощью dataGridView1.Columns.Add("MyColumnName", "MyColumnHeaderText");
можно добавить столбец.
Но я не понимаю двух вещей.
1) зачем нужен первый параметр. Нигде в таблице его не обнаружил
2) Можно ли как-нибудь отцентровать текст в заголовке колонки?

xine 15.03.2011 15:00

Mad-Dan, по columnName можно обращаться к столбцам: dataGridView1.Columns["Name"]


Часовой пояс GMT +4, время: 15:25.

Powered by vBulletin® Version 3.8.0
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.