Robertvokac (talk | contribs) (Created page with "C# and Java are similar programming languages, but have some differences. == Structures in C# vs. Classes in Java == * In C#, struct is a value type, meaning it gets copied when assigned or passed to a method. * In Java, there are no structures—only classes, which are always reference types. === Solution: === * Replace struct in C# with a class in Java. Remember that Java classes behave as references, so they won’t be copied automatically. * If you need value-typ...") |
Robertvokac (talk | contribs) No edit summary |
||
Line 107: | Line 107: | ||
<code> }</code> | <code> }</code> | ||
== Delegates and Events == | |||
=== C# has delegates and events for callbacks: === | |||
<code>public delegate void MyDelegate(string message);</code> | |||
<code>public event MyDelegate MyEvent;</code> | |||
=== Java doesn’t have delegates. Use interfaces or lambdas instead: === | |||
<code>public interface MyEvent {</code> | |||
<code> void invoke(String message);</code> | |||
<code>}</code> | |||
== Nullable Value Types == | |||
=== C# supports nullable value types with Nullable<T> or the ? syntax: === | |||
<code>int? nullableInt = null;</code> | |||
=== Java uses wrapper classes like Integer for nullability: === | |||
<code>Integer nullableInt = null;</code> | |||
== LINQ == | |||
=== LINQ in C# provides powerful querying and data manipulation: === | |||
<code>var filtered = myList.Where(x => x > 10).ToList();</code> | |||
=== In Java, use the Stream API: === | |||
<code>List<Integer> filtered = myList.stream()</code> | |||
<code> .filter(x -> x > 10)</code> | |||
<code> .collect(Collectors.toList());</code> | |||
== Operator Overloading == | |||
=== C# supports operator overloading: === | |||
<code>public static MyClass operator +(MyClass a, MyClass b) {</code> | |||
<code> return new MyClass(a.Value + b.Value);</code> | |||
<code>}</code> | |||
=== Java does not. Use methods instead: === | |||
<code>public MyClass add(MyClass other) {</code> | |||
<code> return new MyClass(this.value + other.value);</code> | |||
<code>}</code> | |||
== Using Statement == | |||
=== C# has the using statement for automatic resource management: === | |||
<code>using (var stream = new FileStream("file.txt")) {</code> | |||
<code> // ...</code> | |||
<code>}</code> | |||
=== Java uses try-with-resources: === | |||
<code>try (FileInputStream stream = new FileInputStream("file.txt")) {</code> | |||
<code> // ...</code> | |||
<code>}</code> | |||
== Static Classes == | |||
=== C# allows static classes: === | |||
<code>public static class MyUtils {</code> | |||
<code> public static int Add(int a, int b) => a + b;</code> | |||
<code>}</code> | |||
=== In Java, use a class with private constructors and static methods: === | |||
<code>public class MyUtils {</code> | |||
<code> private MyUtils() {}</code> | |||
<code> public static int add(int a, int b) {</code> | |||
<code> return a + b;</code> | |||
<code> }</code> | |||
<code>}</code> | |||
== Namespaces vs. Packages == | |||
=== C# uses namespace for code organization: === | |||
<code>namespace MyApp.Utilities {</code> | |||
<code> public class MyClass { }</code> | |||
<code>}</code> | |||
=== Java uses package and requires a matching directory structure: === | |||
<code>package myapp.utilities;</code> | |||
<code>public class MyClass { }</code> | |||
== Enums == | |||
=== C# enums can have explicit values: === | |||
<code>public enum Color {</code> | |||
<code> Red = 1,</code> | |||
<code> Green = 2,</code> | |||
<code> Blue = 3</code> | |||
<code>}</code> | |||
=== Java enums do not support explicit values directly: === | |||
<code>public enum Color {</code> | |||
<code> RED, GREEN, BLUE</code> | |||
<code>}</code> | |||
== Interfaces and Default Methods == | |||
=== C# supports default implementations in interfaces: === | |||
<code>public interface IMyInterface {</code> | |||
<code> void DoSomething() => Console.WriteLine("Default implementation");</code> | |||
<code>}</code> | |||
=== Java also supports default methods, but only from Java 8 onward: === | |||
<code>public interface MyInterface {</code> | |||
<code> default void doSomething() {</code> | |||
<code> System.out.println("Default implementation");</code> | |||
<code> }</code> | |||
<code>}</code> | |||
== String Interpolation == | |||
=== C# supports string interpolation: === | |||
<code>string message = $"Hello, {name}!";</code> | |||
=== In Java, use String.format or concatenation: === | |||
<code>String message = String.format("Hello, %s!", name);</code> | |||
== Exceptions == | |||
C# does not distinguish between checked and unchecked exceptions. | |||
Java requires checked exceptions (IOException, SQLException, etc.) to be handled or declared with throws. | |||
== Dynamic Typing == | |||
C# supports dynamic typing with the dynamic keyword. | |||
Java does not have a direct equivalent. Use reflection or Object. | |||
Revision as of 16:41, 8 December 2024
C# and Java are similar programming languages, but have some differences.
Structures in C# vs. Classes in Java
- In C#, struct is a value type, meaning it gets copied when assigned or passed to a method.
- In Java, there are no structures—only classes, which are always reference types.
Solution:
- Replace struct in C# with a class in Java. Remember that Java classes behave as references, so they won’t be copied automatically.
- If you need value-type behavior, implement a copy method (e.g., clone() or a copy constructor).
public class MyStruct {
private int value;
public MyStruct(int value) {
this.value = value;
}
public MyStruct copy() { // Copy method
return new MyStruct(this.value);
}
public int getValue() {
return value;
}
public void setValue(int value) {
this.value = value;
}
}
Handling References
- In C#, you can use
ref
orout
to pass variables by reference, allowing methods to modify their values. - In Java, there’s no equivalent feature, but you can achieve similar functionality using wrappers.
Solution:
- Define a simple wrapper class:
public class Ref<T> {
public T value;
public Ref(T value) {
this.value = value;
}
}
- Use the wrapper to mimic ref behavior:
public static void modifyValue(Ref<Integer> ref) {
ref.value += 10;
}
public static void main(String[] args) {
Ref<Integer> myValue = new Ref<>(5);
modifyValue(myValue);
System.out.println(myValue.value); // Output: 15
}
Object Properties
- C# supports properties for classes and structs with automatic
get
andset
accessors:
public int Value { get; set; }
- Java uses explicit getter and setter methods:
To convert C# code to Java: Convert properties to methods
public class MyStruct {
private int value;
public int getValue() {
return value;
}
public void setValue(int value) {
this.value = value;
}
}
Delegates and Events
C# has delegates and events for callbacks:
public delegate void MyDelegate(string message);
public event MyDelegate MyEvent;
Java doesn’t have delegates. Use interfaces or lambdas instead:
public interface MyEvent {
void invoke(String message);
}
Nullable Value Types
C# supports nullable value types with Nullable<T> or the ? syntax:
int? nullableInt = null;
Java uses wrapper classes like Integer for nullability:
Integer nullableInt = null;
LINQ
LINQ in C# provides powerful querying and data manipulation:
var filtered = myList.Where(x => x > 10).ToList();
In Java, use the Stream API:
List<Integer> filtered = myList.stream()
.filter(x -> x > 10)
.collect(Collectors.toList());
Operator Overloading
C# supports operator overloading:
public static MyClass operator +(MyClass a, MyClass b) {
return new MyClass(a.Value + b.Value);
}
Java does not. Use methods instead:
public MyClass add(MyClass other) {
return new MyClass(this.value + other.value);
}
Using Statement
C# has the using statement for automatic resource management:
using (var stream = new FileStream("file.txt")) {
// ...
}
Java uses try-with-resources:
try (FileInputStream stream = new FileInputStream("file.txt")) {
// ...
}
Static Classes
C# allows static classes:
public static class MyUtils {
public static int Add(int a, int b) => a + b;
}
In Java, use a class with private constructors and static methods:
public class MyUtils {
private MyUtils() {}
public static int add(int a, int b) {
return a + b;
}
}
Namespaces vs. Packages
C# uses namespace for code organization:
namespace MyApp.Utilities {
public class MyClass { }
}
Java uses package and requires a matching directory structure:
package myapp.utilities;
public class MyClass { }
Enums
C# enums can have explicit values:
public enum Color {
Red = 1,
Green = 2,
Blue = 3
}
Java enums do not support explicit values directly:
public enum Color {
RED, GREEN, BLUE
}
Interfaces and Default Methods
C# supports default implementations in interfaces:
public interface IMyInterface {
void DoSomething() => Console.WriteLine("Default implementation");
}
Java also supports default methods, but only from Java 8 onward:
public interface MyInterface {
default void doSomething() {
System.out.println("Default implementation");
}
}
String Interpolation
C# supports string interpolation:
string message = $"Hello, {name}!";
In Java, use String.format or concatenation:
String message = String.format("Hello, %s!", name);
Exceptions
C# does not distinguish between checked and unchecked exceptions.
Java requires checked exceptions (IOException, SQLException, etc.) to be handled or declared with throws.
Dynamic Typing
C# supports dynamic typing with the dynamic keyword.
Java does not have a direct equivalent. Use reflection or Object.